触发器:插入的表如何工作?如何访问其行?
问题描述:
我有以下表触发器:插入的表如何工作?如何访问其行?
Data --Table name
ID -- Identity column
PCode -- Postal Code
我创建了以下触发:
CREATE TRIGGER Trig
ON Data
FOR INSERT
AS
BEGIN
Select * from inserted
END
并插入下面的值
INSERT INTO Data VALUES (125)
INSERT INTO Data VALUES (126)
INSERT INTO Data VALUES (127)
它显示了这一点:
但我期待这样的事情:
- 一号插入后,触发执行 - >一行显示在
inserted
表。 - 第二次插入后,执行触发器 - >
inserted
表中显示两行。 - 第3次插入后,执行触发器 - >
inserted
表中显示三行。
根据msdn.microsoft插入的所有行都在此表中。
如何访问inserted
表,以便我可以看到所有预期的行而不是分开的?
答
你不能。从microsoft.com上的Use the inserted and deleted Tables文章可以看到:
插入的表在INSERT和UPDATE语句中存储受影响的行的副本。
这意味着inserted
表将只包含当前INSERT
或UPDATE
语句行。
如果您确实想要查看多个此类INSERT
或UPDATE
语句的所有行,则必须将这些行存储在您自己创建的表中。
答
在触发器中有2个表格可用,插入和删除。表XXX上的每个更新实际上是从XXX开始的删除行X,然后是表XXX中行X的插入。所以插入触发器内的是插入内容的副本。触发器可以做很多事情,但触发器很危险。
例如,在一个性能演出中,我发现一个巨大的SP由一个触发器运行,我们放弃它并且数据库恢复在线状态。或者另一个例子,如果你做了一个错误的审计登录的触发器,你可以关闭服务器。