Ich habe eine Tabelle MyTable mit einem Trigger wie folgt definiert:Trigger-Ereignis wird nur einmal für Microsoft SQL Server 2005 DB ausgelöst, wenn mehr als eine Zeile aktualisiert?
ALTER TRIGGER [MyTableInsertDeleteUpdate]
ON [dbo].[MyTable]
AFTER INSERT,DELETE,UPDATE
AS
DECLARE @id int;
BEGIN
SELECT @id = ins.id FROM inserted ins;
IF (@id IS NOT NULL)
BEGIN
-- insert a new record to audit table
PRINT 'inserted/updated id: ' + CAST(@id AS VARCHAR);
END
END
Ich weiß, dass, wenn mehrere Zeilen wie diese aktualisiert werden,
UPDATE MyTable SET name = 'test rows' WHERE id in (1, 2, 3);
die tigger nur einmal aufgerufen wird und nur die firstone in [eingefügt] wird aktualisiert. Tatsächlich kann [eingefügt] mehr als eine Zeile haben (3 in diesem Fall, wenn id 1, 2,3 existieren). In Reihenfolge Worten wird der Trigger nicht für jede Zeile ausgelöst. Ist das richtig?
Ich bin mit Microsoft SQL Server 2005
Oh ja - wollte nur hinzufügen, sollte es kein Problem sein - Sie ändern nur Ihren Auslöser, um auf alle Zeilen in 'eingefügt' entweder mit einem Cursor oder clever sql :) –
, wenn keine Zeilen betroffen sind, eingefügt Die virtuelle Tabelle muss für den Aktualisierungsfall leer sein. Ist es richtig? –
Sie haben eine Zeile im 'insert' für jede eingefügte oder aktualisierte Zeile (Anweisung einfügen und aktualisieren). Überprüfen Sie diesen Link: http://msdn.microsoft.com/en-us/library/ms191300(SQL.90).aspx –