根据逻辑在SQL Server中为相应的表创建触发器

时间:2016-08-11 05:21:39

标签: sql sql-server tsql

我有一个InventoryOnHand表,其中包含Quantity列。

InventoryTransaction记录被插入时,我需要更新Quantity表中的InventoryOnHand

有人可以解释以下内容:

  1. 是否应在InventoryOnHand表或InventoryTransaction表中创建触发器?我会假设InventoryTransaction表,因为这是'INSERTED'

  2. 在命名触发器时,tablename应该是更新的表还是应用了触发器的实际表?例如:tr_InventoryTransactionIns

  3. 以下是我的内容:

    CREATE TRIGGER dbo.tr_InventoryTransactionIns 
       ON  dbo.Inventory 
       AFTER INSERT
    AS 
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
    
        -- Insert statements for trigger here
        UPDATE Inventory SET QuantityOnHand = QuantityOnHand + INSERTED.Quantity
    END
    GO
    

1 个答案:

答案 0 :(得分:2)

您还需要以某种方式链接正在插入的行以及Inventory表中正在更新的行 - 现在,您正在更新整个 Inventory表格!

尝试这样的事情:

CREATE TRIGGER dbo.tr_InventoryTransactionIns 
ON dbo.InventoryTransaction
AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE inv
    SET QuantityOnHand = QuantityOnHand + INSERTED.Quantity
    FROM Inventory inv
    INNER JOIN Inserted ins ON inv.InventoryId = ins.InventoryId
END
GO