在插入和选择时锁定表

本文关键字:锁定 选择 插入 | 更新日期: 2023-09-27 18:17:22

我正在创建一个asp.net站点,其中用户提交一些插入到表1中的数据,然后我运行查询以获取从表1中创建的条目的ID,然后将该ID插入到表2中。问题是,如果有人碰巧同时提交,我很容易得到不正确的数据。我假设可以锁定表1,直到将数据插入到表2中,但我不确定如何做到这一点。有人能提供一些指导吗?我所有的代码都在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