2013-01-15 71 views
0

我必須在表中的一行上鎖定讀取/更新。 我寫了下面的代碼,但它花費了太多的時間。 請建議任何其他方法。行鎖sql服務器

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行

回答

1

爲什麼更新之前讀出的值的表?只需使用更新中的值,並且根本不需要交易:

DECLARE @v_new_rows NUMERIC; 
SET @v_new_rows = 10; 

update tbl_keys set id = id + @v_new_rows where name='tbl_docs'   
+0

該值是輸出參數 –