这个问题与Is a stored procedure call inside a SQL Server trigger implictly thread safe and atomic?有关,所以我不知道是否应该重新发布相同的代码。尽管如此,这是交易。
目前,SQL Server
trigger
暂时为INSTEAD OF INSERT
。它将数据插入名为table
的{{1}}。然后触发器调用Foo
。存储过程的一部分stored procedure
插入Foo的最后一条记录:
selects
假设两个-- New transaction in stored procedure
BEGIN TRANSACTION
...
DECLARE @FooID INT
SELECT
TOP 1 @FooID = ID
FROM
Foo
ORDER BY
ID DESC
...
END TRANSACTION
语句同时执行(让我们调用两个INSERT事务T1和T2进行简化)。这是两个同步触发调用。在我的情况下,触发器和存储过程都是INSERT
。
但我是否需要担心存储过程中atomic
语句的isolation
?是否可以保证正确选择插入的最后一条记录?或者,我可以遇到T1选择T2记录的情况,反之亦然吗?
谢谢。
答案 0 :(得分:1)
MSDN文档中详细介绍了隔离级别:Transaction Isolation Levels,它们肯定会影响SP的运行方式。另外,如昨天所述,触发器中的SP可能看不到导致触发的插入。