0

読み取り/更新のために、テーブル内の 1 つの行をロックする必要があります。以下のコードを書きましたが、時間がかかりすぎます。他の方法を提案してください。

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 に答える