Behandlung mehrerer Zeilen in SQL Server-Trigger
Wir haben eine Datenbank mit einer Tabelle namensWarehouseItem wo die Lagerbestände des Produkts gehalten werden. Ich muss wissen, wann immer diese Tabelle aktualisiert wird, also habe ich einen Auslöser erstellt, um den Primärschlüssel dieser Tabellenzeile abzulegen, die aktualisiert wurde. in eine separate Tabelle (wie ein Warteschlangensystem).
Das ist mein Auslöser:
IF ((SELECT COUNT(*) FROM sys.triggers WHERE name = 'IC_StockUpdate') > 0)
DROP TRIGGER [dbo].[IC_StockUpdate]
GO
CREATE TRIGGER [dbo].[IC_StockUpdate] ON [dbo].[WarehouseItem]
AFTER UPDATE
AS
BEGIN
-- Get Product Id
DECLARE @StockItemID INT = (SELECT ItemID FROM INSERTED);
DECLARE @WarehouseID INT = (SELECT WarehouseID FROM INSERTED);
-- Proceed If This Product Is Syncable
IF (dbo.IC_CanSyncProduct(@StockItemID) = 1)
BEGIN
-- Proceed If This Warehouse Is Syncable
IF (dbo.IC_CanSyncStock(@WarehouseID) = 1)
BEGIN
-- Check If Product Is Synced
IF ((SELECT COUNT(*) FROM IC_ProductCreateQueue WHERE StockItemID = @StockItemID) > 0)
BEGIN
-- Check If Stock Update Queue Entry Already Exists
IF ((SELECT COUNT(*) FROM IC_StockUpdateQueue WHERE StockItemID = @StockItemID) > 0)
BEGIN
-- Reset [StockUpdate] Queue Entry
UPDATE IC_StockUpdateQueue SET Synced = 0
WHERE StockItemID = @StockItemID;
END
ELSE
BEGIN
-- Insert [StockUpdate] Queue Entry
INSERT INTO IC_StockUpdateQueue (StockItemID, Synced) VALUES
(@StockItemID, 0);
END
END
ELSE
BEGIN
-- Insert [ProductCreate] Queue Entry
INSERT INTO IC_ProductCreateQueue (StockItemID, Synced) VALUES
(@StockItemID, 0);
-- Insert [StockUpdate] Queue Entry
INSERT INTO IC_StockUpdateQueue (StockItemID, Synced) VALUES
(@StockItemID, 0);
END
END
END
END
GO
Dies funktioniert einwandfrei, wenn nur eine einzelne Zeile in der Tabelle "WarehouseItem" aktualisiert wird. Wenn jedoch mehr als eine Zeile in dieser Tabelle aktualisiert wird, kann mein Auslöser dies nicht verarbeiten:
Gibt es eine Möglichkeit, die "eingefügte" Auflistung nach einem Massenaktualisierungsereignis zu durchlaufen? Oder wie geht man mit mehreren Zeilenaktualisierungen im Trigger um?