Announcement

Collapse
No announcement yet.

Merkwürdiges Verhalten bei Trigger und SQL Server 2000

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Merkwürdiges Verhalten bei Trigger und SQL Server 2000

    Hallo,

    ich habe folgenden Trigger:

    CREATE TRIGGER PREISLISTE_AFTER_INSERT
    ON dbo.PREISLISTE
    AFTER INSERT
    AS
    BEGIN
    DECLARE @NEW_PreislistenID uniqueidentifier
    SELECT @NEW_PreislistenID = i.ID FROM inserted i JOIN Preisliste P ON i.ID = P.ID
    INSERT Preis (PREISLISTENID, FEKLASSENID) SELECT @NEW_PreislistenID, ID FROM FEKlasse
    END

    Bei einem Insert in die Tabelle Preisliste tritt im aufgeführten Trigger in der Insert-Anweisung folgende Fehlermeldung auf: "Die Schlüsselinformationen sind ungenügend oder inkorrekt. Es sind zu viele Zeilen von der Aktualisierung betroffen". Wenn ich dann aber die Tabelle in Access schließe, sind die Informationen trotzdem korrekt gespeichert.
    Wird die Insert-Anweisung durch eine WHERE-Klausel auf eine einzufügende Zeile beschränkt funktioniert alles ohne Fehlermeldung einwandfrei. Es ist doch aber gerade der Sinn mehrere Zeilen in einer Anweisung einfügen zu können, oder?
    P.S.: Mit einerm Cursor und einer Schleife gibt es ebenfalls keine Probleme beim einfügen!!!

    mfg

    Jörg Seither

  • #2
    Hier nochmal in besserer Darstellung:
    <pre>
    CREATE TRIGGER PREISLISTE_AFTER_INSERT ON dbo.PREISLISTE AFTER INSERT AS
    BEGIN
    DECLARE @NEW_PreislistenID uniqueidentifier
    SELECT @NEW_PreislistenID = i.ID FROM inserted i JOIN Preisliste P ON i.ID = P.ID
    INSERT Preis (PREISLISTENID, FEKLASSENID) SELECT NEW_PreislistenID, ID FROM FEKlasse
    END
    </pre&gt

    Comment


    • #3
      Hallo,

      &gt;Wird die Insert-Anweisung durch eine WHERE-Klausel auf eine einzufügende Zeile beschränkt,<br>
      &gt;funktioniert alles ohne Fehlermeldung einwandfrei.

      der Trigger feuert nicht für jeden einzelnen eingefügten Datensatz, sondern immer nur am Ende der jeweiligen SQL-Anweisung. Immer dann, wenn mehrere Datensätze gleichzeitig eingefügt werden, enthält die Tabelle <i>inserted</i> entsprechend viele Datensätze

      Comment


      • #4
        Erstmal vielen Dank für die Antwort,

        aber ich habe mich glaube ich unklar ausgedrückt. Der Fehler taucht definitiv in der INSERT-Anweisung im Trigger auf. Also in der Zeile "INSERT Preis (PREISLISTENID, FEKLASSENID) SELECT @NEW_PreislistenID, ID FROM FEKlasse". Das SELECT funktioniert nur dann, wenn nicht mehr als ein Datensatz aus der Tabelle FEKLASSE zurückgegeben wird ansonsten erscheint die Fehlermeldung, die Daten sind aber trotzdem nach dem Schließen der Tabelle PREISLISTE für alle Datensätze der Tabelle FEKlasse in der Tabelle PREIS vorhanden. Aber wieso erfolgt trotz korrekter Speicherung die Fehlermeldung?

        Wenn ich diese INSERT....SELECT-Anweisung durch einen Cursor simuliere klappt alles ohne Probleme.

        mfg

        Jörg Seithe

        Comment

        Working...
        X