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:
Die Sicht:
Der Trigger der die eigentliche Arbeit durchführt:
Vielleicht kann dies hilfreich sein
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
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
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