0

SQL Server で 2 ステップの挿入を実行しているときに、テーブルを排他的にロックするために何をする必要があるかを調べるために、トランザクションの分離レベルとテーブル ヒントに関する MSDN を読んでいます。私はそれを行う2つの方法を思いついたので、アプローチの違いを知りたいです。

この回答は、ヒントを使用してそれを行う方法を示しています ( https://stackoverflow.com/a/23759307/545430 ):

--Enclose steps in transaction to define an atomic operation
BEGIN TRAN
    -- Perform an insert that locks tblMoo
    INSERT INTO tblMoo SET fldCow='valPie' WITH (TABLOCKX, SERIALIZABLE)
    UPDATE tblMoo SET fldCowIndex=(SELECT MAX(fldCowIndex) + 1)
COMMIT TRAN

分離レベルを設定することで、目的を達成することもできると思います。

BEGIN TRAN
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    INSERT blah blah blah
    UPDATE hoo dee dah
COMMIT TRAN

トランザクションがこの新しい行を挿入している間、すべての更新からテーブル全体をロックすることが重要です。両方のアプローチで同じ結果が得られるでしょうか? テーブルは INSERT コマンドと UPDATE コマンドの両方でロックされていますか?

4

0 に答える 0