更新在sql server中写入的触发器中的表
问题描述:
我想创建一个触发器,当插入,删除发生在表'Abschaetzung_has_Varianten'中时触发,并更新一个名为'Flag'的表。我需要从同一个表中选择一个ID来更新标志表。在编写ID的SELECT时语法是否错误?我似乎没有从选择中获得@abschID。任何人都可以帮助我。谢谢。更新在sql server中写入的触发器中的表
CREATE TRIGGER trig_update_flag on [Abschaetzung_has_Varianten]
after insert, delete
As
Begin
DECLARE @x INT;
DECLARE @abschID INT;
DECLARE @value INT;
SELECT @value = 1;
SELECT @abschID = (SELECT TOP 1 Abschaetzung_ID FROM Abschaetzung_has_Varianten ORDER BY Abschaetzung_ID DESC);
SELECT @x = Count(*) FROM Flag WHERE AbschaetzID = @abschID
If @x > 0
Begin
UPDATE Flag Set [Flag] = @value WHERE AbschaetzID = @abschID;
end
end
答
你的代码应该是更多这样的:
CREATE TRIGGER trig_update_flag on [Abschaetzung_has_Varianten]
after insert, delete
as
begin
UPDATE Flag Set [Flag] = 1
WHERE AbschaetzID IN (SELECT DISTINCT Abschaetzung_ID FROM INSERTED)
UPDATE Flag Set [Flag] = 1
WHERE AbschaetzID IN (SELECT DISTINCT Abschaetzung_ID FROM DELETED)
end
INSERTED
是包含所有的更新或插入记录的特殊触发假表。
DELETED
是一个特殊的触发伪表,其中包含所有已删除的记录。
此表可能包含一次触发调用的许多记录。
上面的代码并不是最高效的,可能并不适合您的具体要求,但希望您能明白。
+0
是的,它需要一点适应,但效果很好。谢谢您的帮助..!! – Shiva 2014-09-04 13:05:21
首先,您通常使用INSERTED,DELETED伪表,而不是原始表。其次这些表格可能有多个记录,所以你需要编写你的触发器来允许。 – 2014-09-04 12:49:25