我有一个存储过程,它将信息插入到多个表中,并通过SCOPE_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
答案 0 :(得分:1)
没有锁定所需的任何类型 - 您尝试完成的这种行为是已经到位隐式。
SCOPE_IDENTITY()
会在每笔交易的范围中返回新的ID
- 因此,如果10位用户同时运行此操作,则每位用户都会获得他们自己的独立ID 从SCOPE_IDENTITY