2009-01-05 56 views
3

,我发现具体指导的事务隔离级别设置唯一一套参数:将T-Sql SET参数与池连接的.NET连接重置吗?

如果发出SET TRANSACTION ISOLATION LEVEL在存储过程或 触发,当对象返回 控制的隔离级别将 重设为在调用对象 时生效的级别。例如,如果你在一个批次设置 重复读取和 批处理,然后调用设置隔离级别 SERIALIZABLE存储过程 ,隔离级别 设置将恢复为可重复读 当存储过程返回 控制该批次。

其他SET参数怎么样,如SET XACT_ABORTSET DEADLOCK_PRIORITY?如果在存储过程(或从C#提交的批处理)中设置它们,那么下次连接被使用时它们是否会返回到先前的值?

回答

4

默认情况下(即,除非在连接字符串中包含“Connection Reset = false”),.NET会重新使用存储过程的连接,然后重新使用该连接;除此之外,它还取消了自连接打开后发出的任何SET命令。

有关更多详细信息,请参见this article

0

我相信事务隔离级别仍然为当前会话的其余部分设置。这意味着即使在这样一个存储过程返回后,如果客户端cide在相同的连接上(在同一个会话中)调用另一个存储过程,第二个过程将在相同的隔离级别下执行。

+0

这与文档所说的完全相反。 – 2009-01-06 12:49:24

+0

@Eric,是的,我只读了问题的主体,在标题中错过了对.Net的引用......从SQL联机丛书 - “一次只能设置一个隔离级别选项,它仍然存在设置该连接,直到它明确更改。“ sp_reset_connection是客户端行为... – 2009-01-06 14:31:26