Я использую триггер на 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
будет содержать только одну запись, хотя на самом деле она может содержать много. Вам нужно использовать логику на основе набора, в соответствии со всем, что связано с базой данных, и написать обновление, которое учитывает несколько строк. - person Dale K   schedule 28.11.2019