相同SQL Server触发器/存储过程的事务中的Select语句的隔离级别?

时间:2016-05-19 14:13:12

标签: sql sql-server stored-procedures triggers transactions

这个问题与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记录的情况,反之亦然吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

MSDN文档中详细介绍了隔离级别:Transaction Isolation Levels,它们肯定会影响SP的运行方式。另外,如昨天所述,触发器中的SP可能看不到导致触发的插入。