Update trigger Problemchen

janovb

Benutzer
Beiträge
5
Hallo,

wahrscheinlich stell ich mich einfach nur zu doof an, ich bin nämlich auch erst am Anfang meines Datenbankwissens ;)
Folgendes Problem.
Ich habe eine Tabelle "Daten" (D_ID, Bezeichnung)
und ich habe eine Tabelle "Details" (Det_ID, D_ID, z1, z2, z3)
und dazu identisch eine Tabelle "Backup" (B_ID, Det_ID, D_ID, z1, z2, z3)

Jetzt wollte ich über einen Update trigger steuern, das wenn sich in "Daten" was ändert, alle Zeilen aus Details wo D_ID gleich dem geänderten Datensatz entspricht nach "Backup" kopiert werden.

Eigentlich müsste folgendes doch gehen, oder :

Declare @temp_id int

begin
select @temp_id =INSERTED.D_ID from INSERTED
INSERT INTO Backup (D_ID, z1,z2,z3) SELECT D_ID, z1,z2,z3 from Details WHERE D_ID=@temp_id;​
end

Aber es funktioniert nicht ! :(
Und ich hab keine Ahnung warum nicht.
Die Variable bekommt den richtigen Wert.
Ein "INSERT INTO Backup (D_ID) Values (temp_id);" funktioniert ...

Was überseh ich, was mache ich falsch?

Vielen dank im Voraus!
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Hast du mal probiert ob die INSERT Anweisung auserhalb des Triggers geht?
Code:
Declare @temp_id int = 99

INSERT INTO Backup (D_ID, z1,z2,z3) SELECT D_ID, z1,z2,z3 from Details WHERE D_ID=@temp_id;
Eventuell liegt es an der B_ID die auf NOT NULL steht aber nicht automatisch gesetzt wird.
 

janovb

Benutzer
Beiträge
5
nein, am ";" liegts leider nicht
ich habe gemerkt das das insert nicht mehr macht sobald ich es mit einem select kombiniere.
was kann das denn sein? :/
 

ukulele

Datenbank-Guru
Beiträge
4.702
Ich nutze fast immer Variablen um die Werte zu laden und schreibe die dann erst in die Tabelle. Wenn es allerdings außerhalb des Triggers geht bin ich mir auch nicht sicher. Das Backup solltest du besser in [Backup] ändern, wird vieleicht sonst nicht als Tabellenname erkannt.
 

janovb

Benutzer
Beiträge
5
also ich begreifs einfach nicht. separat ausgeführt funktioniert die anweisung
pack ichs in den trigger gehts es nicht
der trigger selber geht aber, das merkt man wenn man eine ganz simple anweisung ausführen lässt

ist das ein bug im sqlserver? langsam scheint mir das am plausibelsten ... :/
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Ich denke eher nicht. Es gibt tatsächlich einige Sachen die bewusst in einem Trigger nicht gehen, außerhalb aber schon. Leider fällt mir grad kein gutes Bespiel ein aber ich hatte sowas auch schonmal. Leg einfach Variablen für z1-z3 an, mach SELECT @z1 = z1,.. FROM tabelle WHERE D_ID = @temp_id und bau dein INSERT nur aus Variablen. Das muss gehen.
 
Oben