例如,我们有一个名为“名称”的表:
id | name
-----+------
1 | Mary
2 | Sue
3 | John
和此触发器:
CREATE TRIGGER TRG_insofdel
ON Names
INSTEAD OF DELETE
AS
BEGIN
-- here I need to get some data from the current row
END
然后我打电话
DELETE FROM Names
WHERE id = 1
如何在触发器中获取玛丽(id == 1)的名字?
在这种情况下,“已删除”表是怎么回事?
答案 0 :(得分:2)
MSDN documentation确实可以解释,但布局并不十分清楚。
在触发器中,SQL Server自动为您提供2个特殊的内存表:
inserted
:添加到表中的数据(用于插入和更新语句)deleted
:从表中删除的数据(用于更新和删除语句)它们与实际表具有相同的列,但完全是只读的-您无法向它们添加列或索引或更改其中的数据。
因此,在您的示例中,要获取要删除的人员的姓名,可以在触发器内执行以下操作:
DECLARE @name varchar(100);
SELECT @name = name from deleted;
重要提示
请注意,如果从表中删除了多行,则deleted
将包含多行-触发器不会为每一行单独调用一次。