Trigger auf Tabelle

15/02/2009 - 10:18 von Georg Reiners | Report spam
Ich verwende folgenden Trigger:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Accession]
ON [dbo].[Worklist]
AFTER Insert
AS
BEGIN
DECLARE @Nummer bigint
SELECT @Nummer = inserted.ID FROM inserted
UPDATE Worklist SET AccessionNo=@Nummer WHERE ID=@Nummer
END

Das Feld "ID" in der Tabelle wird automatisch von der DB
vergeben (Autonummer) und diese Nummer soll auch in das
Feld "AccessionNo" eingetragen werden, was ich mit o.g.
Trigger löse.

Nun habe ich den Effekt, dass manchmal die Spalte AccessionNo
NICHT gefüllt wird.

Jemand eine Idee?
 

Lesen sie die antworten

#1 Stefan Hoffmann
15/02/2009 - 11:26 | Warnen spam
hallo Georg,

Georg Reiners schrieb:
DECLARE @Nummer bigint
SELECT @Nummer = inserted.ID FROM inserted
UPDATE Worklist SET AccessionNo=@Nummer WHERE ID=@Nummer
END

Das Feld "ID" in der Tabelle wird automatisch von der DB
vergeben (Autonummer) und diese Nummer soll auch in das
Feld "AccessionNo" eingetragen werden, was ich mit o.g.
Trigger löse.

Nun habe ich den Effekt, dass manchmal die Spalte AccessionNo
NICHT gefüllt wird.


Ein Trigger im SQL Server wird immer per Statement ausgeführt. Du
benutzt ja schon die Pseudotabelle inserted. Da es eine Tabelle ist,
kann diese auch mehrere Werte enthalten. In diesem Fall ist eine
Skalarwertzuweisung nicht möglich:

SET @Nummer = SELECT ID FROM inserted

gàbe einen Fehler. Durch dein SELECT @Nummmer= umgehst du das, bekommst
aber auch immer nur eine ID.

Lange Rede, kurzer Sinn: Siehe dir UPDATE FROM an. Ungefàhr so:

UPDATE W
SET W.AccessionNo = I.ID
FROM Worklist W
INNER JOIN inserted I
ON W.ID = I.ID


mfG

Ähnliche fragen