Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的锁存储过程_Sql_Sql Server_Stored Procedures_Locking - Fatal编程技术网

SQL中的锁存储过程

SQL中的锁存储过程,sql,sql-server,stored-procedures,locking,Sql,Sql Server,Stored Procedures,Locking,我有一个存储过程,它将信息插入多个表中,并通过SCOPE\u IDENTITY()获取ID。我想防止多个用户同时执行它,这样我的ID就不会混淆 我怎么锁它?我读过关于sp_getapplock和sp_releaselock的书,但没有明确的说明如何使用它。我把我的程序放在下面 create procedure AddPerson( @Name nvarchar(255), @LastName nvarchar(255), @City nvarchar(255),

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

我怎么锁它?我读过关于
sp_getapplock
sp_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
不需要任何类型的锁定-您试图实现的这种行为已经隐式地就位了

SCOPE\u IDENTITY()
返回每个事务的SCOPE中新的
ID
——因此,如果10个用户同时运行此操作,每个人都将从
SCOPE\u IDENTITY
返回自己的独立ID