こんにちは。複数のユーザーが同時にテーブルを更新できないようにしたい。複数のユーザーが同じSQL Serverストアドプロシージャを同時に実行できないようにする
DBテーブル"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