我正在创建一个 asp.net 站点,用户在其中提交一些插入到表 1 中的数据,然后我运行一个查询来获取从表 1 创建的条目的 ID,然后将该 ID 插入到表 2 中。问题是,如果有人恰好同时提交,我很容易得到不正确的数据。我假设在数据插入表 2 之前可以锁定表 1,但我不确定该怎么做。任何人都可以提供一些指导吗?我所有的代码都在一个 C# 代码隐藏文件中。我读到你可以用类似下面的方法来做到这一点,但如果可行,它是如何解锁的?
UPDATE table1 WITH (rowlock)
我正在创建一个 asp.net 站点,用户在其中提交一些插入到表 1 中的数据,然后我运行一个查询来获取从表 1 创建的条目的 ID,然后将该 ID 插入到表 2 中。问题是,如果有人恰好同时提交,我很容易得到不正确的数据。我假设在数据插入表 2 之前可以锁定表 1,但我不确定该怎么做。任何人都可以提供一些指导吗?我所有的代码都在一个 C# 代码隐藏文件中。我读到你可以用类似下面的方法来做到这一点,但如果可行,它是如何解锁的?
UPDATE table1 WITH (rowlock)
您的 ADO 可以调用的示例过程。
/*
create table a (id int identity(1,1) primary key, name varchar(max))
create table b (id int identity(1,1) primary key, ParentID int)
GO
create proc Test as
begin
declare @parentId int
begin tran
begin try
insert into a(name) values('abc')
select @parentId = SCOPE_IDENTITY()
select 'ScopeID',@parentID
insert into b(ParentID) values(@parentid)
--Uncomment this to see the rollback happen
--raiserror ('Testing what will happen if an error occurred to make sure rollback works.',
-- 16, -- Severity.
-- 1 -- State.
-- );
commit tran
end try
begin catch
rollback tran
end catch
end
go
*/
truncate table a --TRUNCATE RESET IDENTITY SEED VALUES (UNLIKE DELETE)
truncate table b
exec Test
select * from a
select * from b