在插入后使用触发器更新 table?

Use a Trigger After Insert for updating a table?

我在 SQL 服务器上使用触发器更新 table 股票,当卖出插入另一个 table 时,但触发器没有对 table 做任何事情=23=],我怀疑我一定有一个我无法破译的错误。当我执行测试插入时,它显示第一个 table.

没有变化

table 是:

 Sku VARCHAR (50) PRIMARY KEY, 
 Stock NUMERIC (38)
);

CREATE TABLE dbo.Salida_Producto (
 Numero_Salida INT PRIMARY KEY,
 Sku VARCHAR (50),
 Cantidad_Salida INT,
 FOREIGN KEY(Sku) REFERENCES Stock(Sku)
);
--Test Tabla Stock. Test Values.
INSERT INTO dbo.Stock VALUES ('El Mitchies',100);
INSERT INTO dbo.Stock VALUES ('La Karencilla',200);
INSERT INTO dbo.Stock VALUES ('Perro',300);```


The Trigger:

CREATE TRIGGER [dbo].[tr_for_insert]
   ON  [dbo].[Salida_Producto]
   AFTER INSERT
AS 
BEGIN
DECLARE 
@Item varchar,
@Cuantos numeric
    SELECT @Item = INSERTED.Sku,
            @Cuantos = INSERTED.Cantidad_Salida
            FROM INSERTED
    UPDATE Stock
        SET Stock = Stock - @Cuantos
        WHERE Sku = @Item

END;
GO

测试插入

INSERT INTO dbo.Salida_Producto VALUES (1, 'El Mitchies',3);
INSERT INTO dbo.Salida_Producto VALUES (2, 'La Karencilla',6);
INSERT INTO dbo.Salida_Producto VALUES (3,'Perro',130); ```

我遇到的问题是消息框显示:

(0 row(s) affected)

(1 row(s) affected)

您认为您的触发器采用逐行方式。这不是好的做法。你必须学会​​用 "by set" 方法思考。

所以实现目标的更好方法应该是:

Update S
      Set S.Stock = S.Stock - I.Cantidad_Salida
   From Stock S
   Inner Join inserted I
   On S.Sku = I.Sku