我在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行)
您已经想到了采用逐行方法进行触发。这不是一个好习惯。您必须学习采用“按套”方法进行思考。
所以实现目标的更好方法应该是:
Update S
Set S.Stock = S.Stock - I.Cantidad_Salida
From Stock S
Inner Join inserted I
On S.Sku = I.Sku