Insert-Trigger

Hallo

Ich möchte ein Insert-Trigger erstellen (siehe Bsp)

CREATE TRIGGER trg_erstelleKBid ON t_kurs
FOR INSERT
AS
INSERT INTO t_kursbesuche ( t_kurs_id, t_mitarbeiter_id, kb_status, fld1)
VALUES ( t_kurs.id, Null, Null,1)

er soll automatisch, nachdem ich ein Kurs erfasst habe, in der Tabelle Kursbesuche einen Datensatz eröffnen. Dort soll er die ID des Kurses übernehmen. Ich erhalte jeweils eine Fehlermeldung, dass ich keine Spaltennamen im Value haben darf. Ich möchte eigentlich nur den Wert der Kurs.id übertragen. Geht das überhaupt???

Besten Dank für Eure Antworten.

Gruss
Miggi

Hallo Miggi,

Ich erhalte jeweils eine Fehlermeldung, dass ich keine
Spaltennamen im Value haben darf. Ich möchte eigentlich
nur den Wert der Kurs.id übertragen. Geht das überhaupt???

Den Wert von t_kurs_id müßtest Du einer Variable zuweisen. Diese kannst Du dann in der VALUES-Klausel verwenden.

Ich nehme mal an, die Syntax ist Transact-SQL (MS SQL Server). Dann kannst Du die t_kurs_id aus der Tabelle inserted lesen und einer Variable wie folgt zuweisen:

CREATE TRIGGER trg\_erstelleKBid ON t\_kurs
FOR INSERT
AS
BEGIN
 DECLARE @kursid INTEGER -- hier den korrekten Datentyp angeben
 @kursid = SELECT t\_kurs\_id FROM inserted 
 -- Falls die Spalte in t\_kurs anders heißt, entspr. ändern
 -- inserted hat die gleiche Struktur wie t\_kurs
 INSERT INTO t\_kursbesuche ( t\_kurs\_id, t\_mitarbeiter\_id, kb\_status, fld1)
 VALUES ( @kursid, Null, Null,1)
END

Peter

Hallo

bei Oracle kannst Du (ich hoffe auch bei Inserts) die Insert-Feldwerte mit :new.xxx referenzieren, vielleicht hilft Dir das in Deinem Fall.

Also z.B.:

INSERT ...
VALUES (:new.id,0,0,1)

Ciao
Werner

Hi Peter

habs ausprobiert erhalte noch fehlermeldungen:

CREATE TRIGGER trg_erstelleKBid ON t_kurs
FOR INSERT
AS
BEGIN
DECLARE @kursid INTEGER
@kursid = SELECT id FROM inserted
INSERT INTO t_kursbesuche ( t_kurs_id, t_mitarbeiter_id, kb_status, fld1)
VALUES (@kursid, Null, Null,1)

END

Server: Nachr.-Nr. 170, Schweregrad 15, Status 1, Prozedur trg_erstelleKBid, Zeile 6
Zeile 6: Falsche Syntax in der Nähe von ‚@kursid‘.

Server: Nachr.-Nr. 137, Schweregrad 15, Status 1, Prozedur trg_erstelleKBid, Zeile 8
Die Variable ‚@kursid‘ muss deklariert werden.

Hab nicht herausgefunden an was es liegen kann. Die Syntax sollte ja stimmer und die Variable @kursid sollte deklariert sein???

Siehts du wo es klemmt???

Gruss
Miggi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ach ja, der SQL Server…

habs ausprobiert erhalte noch fehlermeldungen:

[…]

DECLARE @kursid INTEGER
@kursid = SELECT id FROM inserted

[…]

Hab nicht herausgefunden an was es liegen kann. Die Syntax
sollte ja stimmer und die Variable @kursid sollte deklariert
sein???

Die Zeile mit der Variablenzuweisung lautet ganz korrekt:

SET @kursid = SELECT id FROM inserted

oder alternativ:

SELECT @kursid = id FROM inserted

Eins von beiden sollte auf jeden Fall funktionieren.

Peter

Yep das 2. wars! Danke dir viel Mal!

Gruss
Miggi