在插入后使用触发器更新 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
我在 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