0

我必须锁定表中的一行以进行读取/更新。我已经写了下面的代码,但它花费了太多时间。请建议任何其他方法。

BEGIN TRANSACTION 
DECLARE @v_id_counter NUMERIC;  
DECLARE @v_new_rows NUMERIC;
SET @v_new_rows = 10;   

        SELECT @v_id_counter = id 
        FROM tbl_keys [UPDLOCK  ROWLOCK] with (Xlock) 
        WHERE name='tbl_docs'

        update tbl_keys set id = (@v_id_counter + @v_new_rows ) where name='tbl_docs'        
COMMIT;

tbl_keys:它存储许多表的主键及其替代序列

tbl_docs:这是我必须插入 N 行的表

4

1 回答 1

1

为什么要在更新前读取值?只需使用更新中的值,您根本不需要事务:

DECLARE @v_new_rows NUMERIC;
SET @v_new_rows = 10;   

update tbl_keys set id = id + @v_new_rows where name='tbl_docs'        
于 2013-01-15T15:28:14.130 回答