触发器:插入的table是如何工作的?如何访问它的行?

Trigger: How does the inserted table work? How to access its rows?

我有以下table

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)

显示的是:

但我期待这样的事情:

根据 msdn.microsoft,插入的所有行都在此 table 中。


如何访问 inserted table 以便我可以看到所有预期的行而不是单独查看?

触发器中有 2 个 table 可用,插入的和删除的。 table XXX 上的每个更新实际上是从 XXX 中删除行 X,然后在 table XXX 中插入行 X。所以触发器内部的插入是插入内容的副本。您可以使用触发器做很多事情,但触发器很危险。

例如,在一次演出中,我发现一个巨大的 SP 运行 被触发器触发,我们将其删除,然后数据库重新联机。或者另一个例子,如果你触发错误来审核登录,你可以关闭服务器。

你不能。从关于 microsoft.com 的 Use the inserted and deleted Tables 文章中,您可以阅读:

The inserted table stores copies of the affected rows during INSERT and UPDATE statements.

这意味着 inserted table 将只包含当前 INSERTUPDATE 语句的行。

如果您确实想查看几个这样的 INSERTUPDATE 语句的所有行,则必须将这些行存储在您自己创建的 table 中。

如 TT 所述,如果您想查看所有插入的记录,则需要将触发器更改为如下内容:

CREATE TRIGGER Trig
ON Data
FOR INSERT
AS
BEGIN 

    Select * into "tablename"
    from
    (Select * from inserted) Ins

END