触发器:插入的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)
显示的是:
但我期待这样的事情:
- 第一次插入后,执行触发器 ->
inserted
table 中显示一行。
- 第二次插入后,执行触发器 ->
inserted
table. 中显示两行
- 第 3 次插入后,执行触发器 ->
inserted
table. 中显示三行
根据 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 将只包含当前 INSERT
或 UPDATE
语句的行。
如果您确实想查看几个这样的 INSERT
或 UPDATE
语句的所有行,则必须将这些行存储在您自己创建的 table 中。
如 TT 所述,如果您想查看所有插入的记录,则需要将触发器更改为如下内容:
CREATE TRIGGER Trig
ON Data
FOR INSERT
AS
BEGIN
Select * into "tablename"
from
(Select * from inserted) Ins
END
我有以下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)
显示的是:
但我期待这样的事情:
- 第一次插入后,执行触发器 ->
inserted
table 中显示一行。 - 第二次插入后,执行触发器 ->
inserted
table. 中显示两行
- 第 3 次插入后,执行触发器 ->
inserted
table. 中显示三行
根据 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 将只包含当前 INSERT
或 UPDATE
语句的行。
如果您确实想查看几个这样的 INSERT
或 UPDATE
语句的所有行,则必须将这些行存储在您自己创建的 table 中。
如 TT 所述,如果您想查看所有插入的记录,则需要将触发器更改为如下内容:
CREATE TRIGGER Trig
ON Data
FOR INSERT
AS
BEGIN
Select * into "tablename"
from
(Select * from inserted) Ins
END