1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Update trigger Problemchen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von janovb, 14 November 2011.

  1. janovb

    janovb Benutzer

    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!
     
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
  3. janovb

    janovb Benutzer

    Hallo,
    danke für die schnelle Antwort.

    Ausserhalb des Triggers funktioniert die Anweisung, also z.b. statt der @temp_id direkt "99"
     
  4. ukulele

    ukulele Datenbank-Guru

    Das ; sollte besser nicht im Trigger stehen, eventuell läuft der deshalb nicht sauber durch.
     
  5. janovb

    janovb Benutzer

    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? :/
     
  6. ukulele

    ukulele Datenbank-Guru

    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.
     
  7. janovb

    janovb Benutzer

    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 ... :/
     
  8. ukulele

    ukulele Datenbank-Guru

    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.
     

Diese Seite empfehlen