Announcement

Collapse
No announcement yet.

INSERT in View (basiert auf 2 Tabellen)

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

  • INSERT in View (basiert auf 2 Tabellen)

    Für die Problemstellung Daten in eine Sicht die auf 2 Tabellen basiert einzufügen möchte ich gerne meinen Lösungsansatz darstellen.

    Problemstellung:
    In Tabelle1 werden die Vereine gespeichert.
    In Tabelle2 die Teilnehmer die zu den Vereinen verknüpft sind.

    Anschließend der Beispielcode:

    Die Tabellen:
    Code:
    CREATE TABLE tblVereine
    (
        VerID   int             IDENTITY CONSTRAINT pkVerein PRIMARY KEY,
        Verein  nvarchar(100)   NOT NULL CONSTRAINT unVerein UNIQUE
    );
    GO
    
    CREATE TABLE tblTN
    (
        TNID        int             IDENTITY CONSTRAINT pkTN PRIMARY KEY,
        Nachname    nvarchar(100)   NOT NULL,
        Vorname     nvarchar(100)   NOT NULL,
        VerID       int             CONSTRAINT fkVerein REFERENCES tblVereine(VerID),
    );
    GO
    Die Sicht:
    Code:
    CREATE VIEW vwTeilnehmer
    AS
    SELECT t.Nachname, t.Vorname, v.Verein
    FROM tblTN              AS t
    INNER JOIN tblVereine   AS v
    ON t.VerID = v.VerID
    Der Trigger der die eigentliche Arbeit durchführt:
    Code:
    CREATE TRIGGER trTeilnehmerINSERT
    ON vwTeilnehmer
    INSTEAD OF INSERT
    AS
    
    DECLARE @Verein nvarchar(50)
    SET @Verein = (SELECT Verein FROM inserted)
    
    IF EXISTS
    (
        SELECT *
        FROM tblVereine
        WHERE Verein = @Verein
    )
    BEGIN                       -- falls vorhanden
        -- Hilfvariablen deklarieren:
        DECLARE @VerID int;
        DECLARE @Nachname nvarchar(50);
    
        -- Vereins-ID ermitteln:
        SELECT @VerID = VerID
        FROM tblVereine
        WHERE Verein = @Verein;
    
        -- Nachname ermitteln -> Optimierung!
        SET @Nachname = (SELECT Nachname FROM inserted);
    
        -- Teilnehmer einfügen:
        INSERT INTO tblTN (Nachname, Vorname)
        SELECT Nachname, Vorname FROM inserted;
    
        -- Im 2. Schritt die Vereins-ID setzen:
        UPDATE tblTN
        SET VerID = @VerID
        WHERE Nachname = @Nachname;
    END
    ELSE
    BEGIN                       -- falls nicht vorhanden -> neu anlegen
        -- Verein zur Tabelle hinzufügen:
        INSERT INTO tblVereine (Verein)
        SELECT Verein FROM inserted;
    
        -- Teilnehmer hinzufügen:
        INSERT INTO tblTN (Nachname, Vorname, VerID)
        SELECT Nachname, Vorname, @@IDENTITY FROM inserted;
    END
    Vielleicht kann dies hilfreich sein
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler
Working...
X