插入后使用触发器来更新表吗?

问题描述 投票:0回答:1

我在SQL Server上使用触发器,在将卖出插入另一张表时更新了表库存,但是触发器没有对该表做任何事情,我怀疑我一定有一个我无法破译的错误。当我执行测试“插入”时,它对第一张表没有任何更改。

这些表是:

 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行)

(影响1行)

sql sql-server database triggers eventtrigger
1个回答
0
投票

您已经想到了采用逐行方法进行触发。这不是一个好习惯。您必须学习采用“按套”方法进行思考。

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

Update S
      Set S.Stock = S.Stock - I.Cantidad_Salida
   From Stock S
   Inner Join inserted I
   On S.Sku = I.Sku
© www.soinside.com 2019 - 2024. All rights reserved.