在SQL中锁定存储过程

时间:2016-01-27 23:00:33

标签: sql sql-server stored-procedures locking

我有一个存储过程,它将信息插入到多个表中,并通过SCOPE_IDENTITY()获取ID。我想阻止多个用户同时执行它,这样我的ID就不会混淆了。

如何锁定它?我已阅读有关sp_getapplocksp_releaselock的内容,但没有明确说明如何使用它。下面我把我的程序。

create procedure AddPerson(
    @Name nvarchar(255), 
    @LastName nvarchar(255), 
    @City nvarchar(255), 
    @Address nvarchar(255)
)
as
BEGIN TRY
    BEGIN TRANSACTION
       insert into Location(Address, City)
       values(@Address, @City)

       declare @LocationID int
       set @LocationID = SCOPE_IDENTITY()

       insert into PersonalInfo(Name, LastName)
       values (@Name, @LastName)

       declare @PersonInfoID int
       set @PersonInfoID = SCOPE_IDENTITY()

       insert into Teacher
       values(@LocationID, @PersonInfoID)
    COMMIT
END TRY 
BEGIN CATCH
    ROLLBACK
END CATCH

1 个答案:

答案 0 :(得分:1)

没有锁定所需的任何类型 - 您尝试完成的这种行为是已经到位隐式。

SCOPE_IDENTITY()会在每笔交易的范围中返回新的ID - 因此,如果10位用户同时运行此操作,则每位用户都会获得他们自己的独立ID SCOPE_IDENTITY

返回