Sql-Server
SET LOCK_TIMEOUT,是基於會話還是基於語句?
最後的時間是
LOCK_TIMEOUT
多少?我在登錄後執行一個
SET LOCK_TIMEOUT 10
和一個命令並返回 10。SELECT @@LOCK_TIMEOUT
緊接著我又做了SELECT @@LOCK_TIMEOUT
一次,它返回-1。我還以為還是10。我在 MSDN 網站上做了一些查找,但找不到
LOCK_TIMEOUT
是基於會話還是基於語句。
您的應用程序是否通過 送出查詢
sp_executesql
?(如果不確定,可以在 Profiler 中檢查)EXEC sp_executesql N'SET LOCK_TIMEOUT 10; SELECT @@LOCK_TIMEOUT'; SELECT @@LOCK_TIMEOUT;
退貨
----------- 10 ----------- -1
為了我。
編輯我也看到了同樣的行為
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
從
SET LOCK_TIMEOUT
聯機叢書條目:“在連接開始時,此設置的值為 -1。更改後,新設置對連接的其餘部分保持有效。”
我進行的所有測試都反映了這種記錄在案的行為。也許您正在使用不同的連接但獲得相同的會話 ID?使用此查詢檢查:
SELECT dec.connection_id, dec.connect_time FROM sys.dm_exec_connections AS dec WHERE dec.session_id = @@SPID;