【发布时间】:2019-11-28 08:02:39
【问题描述】:
我在 SQL 服务器上使用触发器来更新表股票,当卖出插入另一个表时,但触发器没有对表做任何事情,我怀疑我一定有一个我无法破译的错误。当我执行测试插入时,它显示第一个表没有变化。
这些表格是:
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 行)
【问题讨论】:
-
你犯了很多人犯的经典错误,假设
Inserted将只包含一条记录——而实际上它可以包含很多条记录。您需要根据与数据库相关的所有内容使用基于集合的逻辑,并编写一个包含多行的更新。 -
感谢指正,下次会记住的。
标签: sql sql-server database triggers eventtrigger