sql >> データベース >  >> RDS >> Sqlserver

UPDATE + WITH (ROWLOCK) + CTE

    NOLOCK 変更するテーブルを参照するクエリの部分には適用されません。 SQL Server の update ステートメントでは、テスト中に各行を短時間 U ロックします。これはデッドロック回避メカニズムです。これにより、各行を読み取り用に S ロックしてから X ロックしようとする複数の更新が防止されます。

    私の知る限り、Uロックをなくすことはできません。ただし、自己結合によって、U ロックされた行の量を絶対最小値まで減らすことができます。

    update t1
    set ...
    from T t1 with (rowlock)
    where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)
    

    これによりオーバーヘッドが少し増えますが、 NOLOCK を使用できます

    読み取りにスナップショット分離を使用することを検討してください。 NOLOCK クエリがランダムに中止されるなどの問題があります。




    1. APP_NAME()を使用して、SQLServerの現在のセッションのアプリケーション名を取得します

    2. エラー:バインディング エラーのため、ビューまたは関数を使用できませんでした

    3. DECLARECURSORFORの構文エラー

    4. ドロップダウンリストから対応するオプションが選択された後、それぞれのテーブルに場所が表示された回数を表示します