此 SQL 语句对于并发访问安全吗?
Is this SQL Statement Safe for Concurrent Access?
'safe'下面的SQL语句是否为并发访问? A
什么时候会被锁定?如果它就在 INSERT
之前,第一个 @count
是否有可能是错误的?
BEGIN TRAN;
SELECT @count = count(1) from A
DELETE FROM A where x=z
SELECT @newCount = count(1) from A
SELECT @newCount - @count
COMMIT TRAN;
BEGIN TRAN;
DECLARE @RC INT
EXEC @RC = sp_getapplock @Resource='ArchiveLock', @LockMode='Exclusive', @LockOwner='Transaction', @LockTimeout=15000
SELECT @count = count(1) from A
DELETE FROM A where x=z
SELECT @newCount = count(1) from A
SELECT @newCount - @count
COMMIT TRAN;
试试这个。我最近用它来处理一组由多个进程并行调用的 Delet 语句。 sp_getapplock 在提交事务之前创建一个锁,这使得其他进程等待。
希望对您有所帮助!
'safe'下面的SQL语句是否为并发访问? A
什么时候会被锁定?如果它就在 INSERT
之前,第一个 @count
是否有可能是错误的?
BEGIN TRAN;
SELECT @count = count(1) from A
DELETE FROM A where x=z
SELECT @newCount = count(1) from A
SELECT @newCount - @count
COMMIT TRAN;
BEGIN TRAN;
DECLARE @RC INT
EXEC @RC = sp_getapplock @Resource='ArchiveLock', @LockMode='Exclusive', @LockOwner='Transaction', @LockTimeout=15000
SELECT @count = count(1) from A
DELETE FROM A where x=z
SELECT @newCount = count(1) from A
SELECT @newCount - @count
COMMIT TRAN;
试试这个。我最近用它来处理一组由多个进程并行调用的 Delet 语句。 sp_getapplock 在提交事务之前创建一个锁,这使得其他进程等待。
希望对您有所帮助!