Announcement

Collapse
No announcement yet.

Mit Trigger Primary Key über Sequenz füllen

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

  • Mit Trigger Primary Key über Sequenz füllen

    Hallo zusammen,
    ich bin ein MSSQL-Server Neuling und komme von der Oracle Schiene.

    Ich muss in einer DB-Tabelle die PK-Spalte nach insert mit der nächsten Sequenz-Nummer füllen.
    Grundsätzlich klappt das auch, aber die ID'S werden in ALLEN DS gefüllt und nicht nur in den gerade eingefügten.
    Habe schon verschiedenes probiert, aber erfolglos.
    Kann mir jemand helfen?
    Hier der Trigger:

    USE [TEST_DB]
    GO
    /****** Object: Trigger [dbo].[TR_AI_PDBI_DATA_IMPORT] Script Date: 11.03.2020 17:13:17 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[TR_AI_PDBI_DATA_IMPORT] ON [dbo].[PDBI_DATA_IMPORT]
    instead of INSERT
    AS
    BEGIN
    UPDATE PDBI_DATA_IMPORT
    SET PDBI_ID = next value for PDBI_DATA_IMPORT_SEQ
    from inserted;
    END

  • #2
    Wäre in Oracle auch so
    Das SQL updated nun mal alle Datensätze
    M.E. muss das noch der zu updatende Datensatz identifiziert werden.
    Verstehen tu ich nicht, wie du NACH dem insert den PK ändern willst. Es muss doch beim insert schon ein gültiger PK vorhanden sein.
    Und warum den insert nicht gleich richtig machen und sich den Trigger ersparen.
    insert into table next value for PDBI_DATA_IMPORT_SEQ,...
    Zuletzt editiert von Christian Marquardt; 11.03.2020, 19:14.
    Christian

    Comment


    • #3
      Grundsätzlich klappt das auch, aber die ID'S werden in ALLEN DS gefüllt und nicht nur in den gerade eingefügten.
      Sicher? Das ist ein INSTEAD OF INSERT Trigger. Anstatt dem Insert hast du alle anderen Datensätze upgedatet aber den eigentlichen Insert unterdrückt.

      Wenn du deinen PK nicht einfach als Autoincrement Spalte anlegen willst und aus irgendeinem Grund ein Sequence möchtest dann würde ich den einfach als Default für die Spalte definieren.

      Code:
      CREATE TABLE PDBI_DATA_IMPORT (  
           PDBI_ID bigint NOT NULL CONSTRAINT DF_MYLOVELYDEFAULT DEFAULT NEXT VALUE FOR PDBI_DATA_IMPORT_SEQ,      .... weitere felder )
      oder nachträglich

      Code:
      ALTER TABLE PDBI_DATA_IMPORT ADD CONSTRAINT DF_MYLOVELYDEFAULT DEFAULT (NEXT VALUE FOR PDBI_DATA_IMPORT_SEQ) FOR [PDBI_ID ]

      Comment


      • Prag-Klaus
        Prag-Klaus commented
        Editing a comment
        Hallo Ralf,

        super und vielen Dank hat geklappt.
        Manchmal sind die Lösungen soo einfach. ;-)

        Gruß,
        Klaus
    Working...
    X