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