我有一个任意的存储过程usp_DoubleCheckLockInsert
,INSERT
并且我想授予存储过程独占访问权限,以便SomeTable
当它位于临界区Begin lock
和End lock
.
CREATE PROCEDURE usp_DoubleCheckLockInsert
@Id INT
,@SomeValue INT
AS
BEGIN
IF (EXISTS(SELECT 1 FROM SomeTable WHERE Id = @Id AND SomeValue = @SomeValue)) RETURN
BEGIN TRAN
--Begin lock
IF (EXISTS(SELECT 1 FROM SomeTable WHERE Id = @Id AND SomeValue = @SomeValue)) ROLLBACK
INSERT INTO SomeTable(Id, SomeValue)
VALUES(@Id,@SomeValue);
--End lock
COMMIT
END
我已经看到了隔离级别与更新的关系,但是有没有办法在关键部分实现锁定,给事务写锁,或者 TSQL 不是这样工作的?