SET LOCK_TIMEOUT,是基于会话还是基于语句?

Dav*_*ght 6 sql-server sql-server-2008-r2 configuration locking

LOCK_TIMEOUT最后是什么时期?

我在登录后执行一个SET LOCK_TIMEOUT 10SELECT @@LOCK_TIMEOUT一个命令并返回 10。在此之后,我立即SELECT @@LOCK_TIMEOUT再次执行 a并返回 -1。我会认为它仍然是10。

我在 MSDN 站点上做了一些查找,但找不到LOCK_TIMEOUT是基于会话还是基于语句。

Mar*_*ith 3

您的应用程序是否通过 提交查询sp_executesql?(如果不确定的话可以在Profiler中查看)

EXEC sp_executesql N'SET LOCK_TIMEOUT 10; 
                     SELECT @@LOCK_TIMEOUT';

SELECT @@LOCK_TIMEOUT;
Run Code Online (Sandbox Code Playgroud)

退货

-----------
10

-----------
-1
Run Code Online (Sandbox Code Playgroud)

为我。

编辑我也看到同样的行为exec sp_prepexec

declare @p1 int

exec sp_prepexec @p1 output,
                 NULL,
                 N'SET LOCK_TIMEOUT 10; SELECT @@LOCK_TIMEOUT AS LOCK_TIMEOUT_INSIDE' 

select @p1 AS handle, @@LOCK_TIMEOUT AS LOCK_TIMEOUT_OUTSIDE
Run Code Online (Sandbox Code Playgroud)