行锁和锁升级

我正在尝试使用rowlock来阻止某些行在运行时进行更新,但问题是我在运行时根本无法使用这些表:
set transaction isolation level repeatable read;
go

    begin try   
        begin transaction;

        insert into tableB with(rowlock)
            select * from tableA with(rowlock) where status = 1

        commit transaction;
    end try
    begin catch
        if xact_state() <> 0
        begin
            rollback transaction;
        end
    end catch;
我在这个事务运行时为两个表运行了一个插入,他们都等待它提交。如何锁定某些行以进行读取和删除但保持表可用? 对于记录,选择结果成千上万条记录。这些表具有聚簇主键,而状态列具有索引。     
已邀请:
我不建议尝试单独锁定某些行。我认为你会遇到比你想要解决的更多问题。您遇到锁定问题的原因是因为插入的行数与表中的行数相比较。根据SQL Server的不同,锁会从行锁升级到页锁到表锁。 我认为在更小的事务批处理中插入行会更好,以减少锁定的数量。换句话说,在事务中尝试一次插入100行,以查看是否获得了可接受的锁定性能类型。     

要回复问题请先登录注册