我必须锁定表中的一行以进行读取/更新。 我写了下面的代码但是花了太多时间。 请建议任何其他方法。
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行的表
答案 0 :(得分:1)
为什么在更新前读取值?只需使用更新中的值,您根本不需要事务:
DECLARE @v_new_rows NUMERIC;
SET @v_new_rows = 10;
update tbl_keys set id = id + @v_new_rows where name='tbl_docs'