0
嗨,我想阻止多個用戶同時更新表。防止多個用戶同時運行相同的SQL Server存儲過程
在數據庫需要更新表"abd.dbo.xyz"
。我是SQL新手,但是我寫了一個尚未滿足我需求的代碼。
任何幫助?
use [abc]
BEGIN TRANSACTION
DECLARE @res INT
EXEC @res = sp_getapplock
@Resource = 'This a Lock ID',
@LockMode = 'Exclusive',
@LockOwner = 'Transaction',
@LockTimeout = 15000,
IF @res NOT IN (0, 1)
BEGIN
RAISERROR ('Unable to acquire Lock', 16, 1)
END
ELSE
BEGIN
-- this is update command which i need to run one instance only
Update abc.dbo.xyz set IsKeyProduct= NULL Where IsKeyProduct is not NULL;
EXEC @res = sp_releaseapplock
@Resource = 'This a Lock ID',
@DbPrincipal = 'public',
@LockOwner = 'Transaction'
END
COMMIT
你可能會做更多的工作比必要理會。檢查表提示,看看他們是否做你想做的:https://technet.microsoft.com/en-us/library/ms187373(v=sql.105).aspx。 –
這是什麼原因? DBMS處理這個。 – Dane
而不是更新命令我有一個存儲過程大約需要60分鐘才能完成。同時,如果有其他用戶運行相同的proc,則需要很長時間才能完成(90分鐘)。所以我想避免這個問題。 – Ramaq