Ich habe folgende Cursor-Code in einem Trigger 5 Aufzeichnungen arbeitet jede Stunde in eine neue Tabelle Cursor zu bewegen fein unabhängig, aber wenn in Trigger es funktioniert nicht. TableA wird vor jedem Laden abgeschnitten.Cursor in einem Trigger nicht wie erwartet funktionieren
meine Cursor Logik
Declare @a[varchar](50),@b[varchar](50),@c[varchar](50),@d[varchar](50),@e[varchar](50)
-- declare a cursor
DECLARE insert_cursor CURSOR FOR
SELECT [a]
,[b]
,[c]
,[d]
,[e]
FROM TableA
-- open cursor and fetch first row into variables
OPEN insert_cursor
FETCH NEXT FROM insert_cursor into @a,@b,@c,@d,@e
-- check for a new row
WHILE @@FETCH_STATUS=0
BEGIN
-- do complex operation here
Insert into TableB
SELECT @a,@b,@c,@d,@e
-- get next available row into variables
FETCH NEXT FROM insert_cursor into @a,@b,@c,@d,@e
END
close insert_cursor
Deallocate insert_cursor
Mein Cursor in Trigger-Code:
CREATE TRIGGER IO_ABC_INSERT ON TABLEA
INSTEAD OF INSERT
AS
BEGIN
Declare @a[varchar](50),@b[varchar](50),@c[varchar](50),@d[varchar](50),@e[varchar](50)
-- declare a cursor
DECLARE insert_cursor CURSOR FOR
SELECT [a]
,[b]
,[c]
,[d]
,[e]
FROM TableA
-- open cursor and fetch first row into variables
OPEN insert_cursor
FETCH NEXT FROM insert_cursor into @a,@b,@c,@d,@e
-- check for a new row
WHILE @@FETCH_STATUS=0
BEGIN
-- do complex operation here
Insert into TableB
SELECT @a,@b,@c,@d,@e
-- get next available row into variables
FETCH NEXT FROM insert_cursor into @a,@b,@c,@d,@e
END
close insert_cursor
Deallocate insert_cursor
END
Kann jemand mir zeigen, wo genau ich falsch tue?
Ein Cursor ist in der Regel eine schlechte Idee, in einem Trigger ist es Ereignis Schlimmste. Außerdem ist Ihr Trigger ein Insert-Trigger, was bedeutet, dass keine Zeilen in die Tabelle eingefügt werden, es sei denn, Sie fügen sie in den Trigger selbst ein. –
Ich verstehe, aber nur für 5 Zeilen jede Stunde so dachte, dieser Prozess wäre gut alle Hinweise für jede andere Art wird sehr geschätzt. – Zack
Erstens passt diese Art von Task einem geplanten Job besser als einem Trigger. Zweitens müssen Sie herausfinden, welche fünf Datensätze Sie zuerst kopieren möchten. Ihr aktueller Code nimmt nur alle Datensätze aus TabelleA und fügt sie einzeln in TabelleB ein. –