trigger
horst
- datenbank
Hallo zusammen,
ich habe eine Tabelle test mit den Spalten s1,s2,s3.
Jetzt möchte ich gerne einen Trigger schreiben der folgendes tut:
wenn z.B. die Werte (1,2,3) in die Tabelle geschreiben werden,
soll auch (vom Trigger ausgelöst) (2,1,3) in der Tabelle stehen.
Also soll jedesmal wenn x,y,z in die Tabelle geschrieben wird, auch
y,z,x reingeschrieben/überschrieben werden.
Wie geht das? Kennt jemande ein gutes Tutorial zu Triggern (PL/SQL)
Viele Grüße
Horst
Hallo, Horst,
also Deine Anforderung ist fuer mich auf den ersten Blick etwas esoterisch und ich kenne nur den MSSQL Server in verschiedenen Versionen, aber:
Was Du tun solltest ist natuerlich einen "Insert"-Trigger schreiben; die Syntax koennte beim gen. DB(M)S wie foilgt aussehen:
create trigger
trg_selfhtml
on
table_selfhtml
for insert -- for insert, update
as
begin
declare
@x int,
@y int,
@z int
set
@x = (select y from Inserted) -- Inserted ist eine "logische" Tabelle, die "insertede" Datensaetze enthaelt
set
@y = (select x from inserted)
set
@z = (select z from inserted)
set
@ID = (select [ID] from inserted) -- Du solltest immer Eindeutigkeiten bilden, damit Datensaetze bearbeitet werden koennen. Ein DF "ID" benoegtigt "man" schon.
update
table_selfhtml
set
x = @x,
y = @y,
z = @z
where
([ID] = @ID)
end
ich habe eine Tabelle test mit den Spalten s1,s2,s3.
Jetzt möchte ich gerne einen Trigger schreiben der folgendes tut:
wenn z.B. die Werte (1,2,3) in die Tabelle geschreiben werden,
soll auch (vom Trigger ausgelöst) (2,1,3) in der Tabelle stehen.
Also soll jedesmal wenn x,y,z in die Tabelle geschrieben wird, auch
y,z,x reingeschrieben/überschrieben werden.
Du keonnetest bei komplexeren Operationen auch ("unter" MSSQL Server) in Triggern mit Transaktionen arbeiten (begin tran..commit tran..rollback tran).
Gruss,
Lude
Hallo,
habe den Trigger jetzt hinbekommen und festgestellt:
das geht ja gar nicht...
ein trigger der auf ein insert reagiert und dann ein insert auf diese tabelle macht = super rekursion... :)
trotzdem danke
viele grüße
horst
Hallo, Horst,
also Deine Anforderung ist fuer mich auf den ersten Blick etwas esoterisch und ich kenne nur den MSSQL Server in verschiedenen Versionen, aber:
Was Du tun solltest ist natuerlich einen "Insert"-Trigger schreiben; die Syntax koennte beim gen. DB(M)S wie foilgt aussehen:create trigger
trg_selfhtml
on
table_selfhtml
for insert -- for insert, update
as
begin
declare
@x int,
@y int,
@z int
set
@x = (select y from Inserted) -- Inserted ist eine "logische" Tabelle, die "insertede" Datensaetze enthaelt
set
@y = (select x from inserted)
set
@z = (select z from inserted)
set
@ID = (select [ID] from inserted) -- Du solltest immer Eindeutigkeiten bilden, damit Datensaetze bearbeitet werden koennen. Ein DF "ID" benoegtigt "man" schon.
update
table_selfhtml
set
x = @x,
y = @y,
z = @z
where
([ID] = @ID)
endich habe eine Tabelle test mit den Spalten s1,s2,s3.
Jetzt möchte ich gerne einen Trigger schreiben der folgendes tut:
wenn z.B. die Werte (1,2,3) in die Tabelle geschreiben werden,
soll auch (vom Trigger ausgelöst) (2,1,3) in der Tabelle stehen.
Also soll jedesmal wenn x,y,z in die Tabelle geschrieben wird, auch
y,z,x reingeschrieben/überschrieben werden.Du keonnetest bei komplexeren Operationen auch ("unter" MSSQL Server) in Triggern mit Transaktionen arbeiten (begin tran..commit tran..rollback tran).
Gruss,
Lude
Hi,
stop. Der Trfigger macht ein UPDATE auf einen INSERT hin; keinen INSERT auf einen INSERT hin.
Ausserdem: Selbst, wenn ein INS auf ein INS folgt, so verhindert die Standardeinstellung von MSSQL Server eine Rekursion mit nimmerwaehrendem Ende.
Trotzdem bitte.
Gruss,
Lude
Hallo,
habe den Trigger jetzt hinbekommen und festgestellt:
das geht ja gar nicht...
ein trigger der auf ein insert reagiert und dann ein insert auf diese tabelle macht = super rekursion... :)trotzdem danke
viele grüße
horstHallo, Horst,
also Deine Anforderung ist fuer mich auf den ersten Blick etwas esoterisch und ich kenne nur den MSSQL Server in verschiedenen Versionen, aber:
Was Du tun solltest ist natuerlich einen "Insert"-Trigger schreiben; die Syntax koennte beim gen. DB(M)S wie foilgt aussehen:create trigger
trg_selfhtml
on
table_selfhtml
for insert -- for insert, update
as
begin
declare
@x int,
@y int,
@z int
set
@x = (select y from Inserted) -- Inserted ist eine "logische" Tabelle, die "insertede" Datensaetze enthaelt
set
@y = (select x from inserted)
set
@z = (select z from inserted)
set
@ID = (select [ID] from inserted) -- Du solltest immer Eindeutigkeiten bilden, damit Datensaetze bearbeitet werden koennen. Ein DF "ID" benoegtigt "man" schon.
update
table_selfhtml
set
x = @x,
y = @y,
z = @z
where
([ID] = @ID)
endich habe eine Tabelle test mit den Spalten s1,s2,s3.
Jetzt möchte ich gerne einen Trigger schreiben der folgendes tut:
wenn z.B. die Werte (1,2,3) in die Tabelle geschreiben werden,
soll auch (vom Trigger ausgelöst) (2,1,3) in der Tabelle stehen.
Also soll jedesmal wenn x,y,z in die Tabelle geschrieben wird, auch
y,z,x reingeschrieben/überschrieben werden.Du keonnetest bei komplexeren Operationen auch ("unter" MSSQL Server) in Triggern mit Transaktionen arbeiten (begin tran..commit tran..rollback tran).
Gruss,
Lude
"The Good the Bad and the Ugly"