存储过程触发器

存储过程:存储过程是一组预编译的SQL语句,可以在数据库中存储并重复使用。存储过程可以提高性能、减少网络流量并提高安全性。MSSQL中的存储过程使用T-SQL编写。

触发器:触发器是一种特殊类型的存储过程,它会在数据库中执行某个操作(如INSERT、UPDATE或DELETE)时自动触发。触发器可以用于强制实施业务规则、维护数据完整性等。

在MSSQL中创建存储过程和触发器的示例。在这个示例中,我们将创建一个存储过程,用于在Orders表中插入新的订单,并创建一个触发器,在插入新订单时检查订单金额是否大于1000。如果大于1000,触发器将在Audit表中插入一条记录。

  • 创建Orders表和Audit表:
CREATE TABLE Orders
(
    OrderId INT PRIMARY KEY,
    CustomerId INT,
    OrderAmount DECIMAL(10, 2)
);

CREATE TABLE Audit
(
    AuditId INT PRIMARY KEY IDENTITY,
    OrderId INT,
    OrderAmount DECIMAL(10, 2),
    AuditDate DATETIME
);
  • 创建存储过程:
CREATE PROCEDURE InsertOrder
    @OrderId INT,
    @CustomerId INT,
    @OrderAmount DECIMAL(10, 2)
AS
BEGIN
    INSERT INTO Orders (OrderId, CustomerId, OrderAmount)
    VALUES (@OrderId, @CustomerId, @OrderAmount);
END;
  • 创建触发器:
CREATE TRIGGER tr_AuditOrder
ON Orders
AFTER INSERT
AS
BEGIN
    DECLARE @OrderId INT;
    DECLARE @OrderAmount DECIMAL(10, 2);

    SELECT @OrderId = OrderId, @OrderAmount = OrderAmount
    FROM INSERTED;

    IF (@OrderAmount > 1000)
    BEGIN
        INSERT INTO Audit (OrderId, OrderAmount, AuditDate)
        VALUES (@OrderId, @OrderAmount, GETDATE());
    END
END;

使用存储过程InsertOrder插入新的订单,触发器将自动检查订单金额并在需要时将记录插入到Audit表中。示例:在这个示例中,我们插入了一个金额为1200的订单。由于订单金额大于1000,触发器将在Audit表中插入一条记录。

EXEC InsertOrder @OrderId = 1, @CustomerId = 1, @OrderAmount = 1200;

这条SQL语句的目的是从INSERTED临时表中获取OrderIdOrderAmount这两个字段的值,并将它们分别赋值给变量@OrderId@OrderAmount

INSERTED是一个临时表,它包含了触发器操作所影响的所有插入或更新的行。在这个例子中,触发器是在Orders表上的AFTER INSERT操作,所以INSERTED表将包含所有插入的新行。

SELECT @OrderId = OrderId, @OrderAmount = OrderAmount FROM INSERTED;语句将从INSERTED表中选择OrderIdOrderAmount字段的值,并将它们分别赋值给变量@OrderId@OrderAmount。这样,在触发器的后续操作中,您可以使用这些变量来访问这些值。

请注意,如果INSERTED表中有多行,此语句将只返回一行。如果您需要处理多行,请使用游标或其他适当的方法来处理。

你可能感兴趣的:(oracle,数据库,开发语言,sqlserver,sql)