INSERTED table 是否可以包含来自触发相同触发器的两个同时事务的值? SQL 服务器 2012

Can the INSERTED table contain values from two simultaneous transactions that fired the same trigger? SQL Server 2012

我在不同主机上有相同的应用程序批量插入到同一个 table。每个批量插入都会触发一个触发器。 table的结构如下:

Hostname    Quantity
---------------------
BOX_1       10
BOX_1       15
BOX_1       20
BOX_1       11

如果我有以下代码作为触发器的一部分:

DECLARE @hostname VARCHAR(20)
SELECT @hostname = Hostname
FROM INSERTED

每个批量插入只包含一个主机名,因为应用程序只从其 运行 所在的盒子中捕获数据,但是如果两台机器同时批量插入到同一个 table,INSERTED table 是来自不同机器的批量插入的组合?

或者触发器会按顺序执行,这意味着 INSERTED table 将始终包含一次仅来自一个应用程序的数据?

我需要知道我的代码设置 @hostname 变量是否有可能不局限于一个选择。

INSERTED(和 DELETED)table 将只包含导致触发器触发的语句中的行。

看这里:https://msdn.microsoft.com/en-us/library/ms191300(v=sql.110).aspx

The inserted table stores copies of the affected rows during INSERT and UPDATE statements. During an insert or update transaction, new rows are added to both the inserted table and the trigger table. The rows in the inserted table are copies of the new rows in the trigger table.

这些 table 中的行的有效范围限定为导致触发器最初触发的 insert/update/delete 语句。

另请参阅此处了解更多信息:

但请记住,在您的触发器设计中,某些其他插入或更新操作(手动批量插入或数据维护)可能会导致您的触发器触发,并且有关主机名的假设可能不再成立。在您继续前进或忘记此触发器之后,这可能会持续数年!