Problem mit Update-Trigger

27/10/2008 - 15:05 von Stefan Dirks | Report spam
Hallo NG,

ich bin neu im Thema "Trigger".

Ich möchte gerne erreichen, dass nach einem Update eines Datensatzes ein
Trigger ausgeführt wird. Der Trigger soll dann einen Datensatz in einer
anderen Tabelle aktualisieren.
Nach dem ich den Trigger erstellt habe, kann ich keine Datensàtze mehr in
der Tabelle aktualisieren. Ich erhalte beim Aktualisieren die Fehlermeldung:
Die aktualisierten oder gelöschten Datensàtze machen die Zeile nicht
eindeutig oder àndern mehrere Zeilen (2 Zeilen). Entferne ich den Trigger,
kann ich den Datensatz wieder ohne Probleme àndern. Bei einem testweise
erstellten Delete-Trigger habe ich das gleiche Problem, dann bekomme ich
ebenfalls die Fehlermeldung und kann den Datensatz nicht mehr löschen.

Gruß Stefan


ALTER TRIGGER [dbo].[UpdateTrigger]
ON [dbo].[TABA]
AFTER UPDATE
AS
DECLARE
@ID nvarchar(255);

BEGIN
SELECT @ID=id FROM deleted;
UPDATE TABB Set [text]='test' where id=@ID and typ='standard';

END
 

Lesen sie die antworten

#1 Christoph Muthmann
27/10/2008 - 15:37 | Warnen spam
Stefan Dirks wrote:
Hallo NG,

ich bin neu im Thema "Trigger".

Ich möchte gerne erreichen, dass nach einem Update eines Datensatzes
ein Trigger ausgeführt wird. Der Trigger soll dann einen Datensatz in
einer anderen Tabelle aktualisieren.
Nach dem ich den Trigger erstellt habe, kann ich keine Datensàtze
mehr in der Tabelle aktualisieren. Ich erhalte beim Aktualisieren die
Fehlermeldung: Die aktualisierten oder gelöschten Datensàtze machen
die Zeile nicht eindeutig oder àndern mehrere Zeilen (2 Zeilen).
Entferne ich den Trigger, kann ich den Datensatz wieder ohne Probleme
àndern. Bei einem testweise erstellten Delete-Trigger habe ich das
gleiche Problem, dann bekomme ich ebenfalls die Fehlermeldung und
kann den Datensatz nicht mehr löschen.
Gruß Stefan


ALTER TRIGGER [dbo].[UpdateTrigger]
ON [dbo].[TABA]
AFTER UPDATE
AS
DECLARE
@ID nvarchar(255);

BEGIN
SELECT @ID=id FROM deleted;
UPDATE TABB Set [text]='test' where id=@ID and typ='standard';

END



Hallo Stefan,
der Trigger wird pro Statement, nicht pro Zeile ausgeführt. Das Update ist
also nicht möglich, wenn Du mehrere Zeilen ànderst.

Versuch mal etwas wie:

Update TABB set [text] = 'test'
from TABB b inner join deleted d on b.id = d.id
and B.typ = 'standard';

Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org

Ähnliche fragen