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

SQLServerプロセスキューの競合状態

    編集:

    「READPASTとUPDLOCKを使用したSQLServerでのデータキューの処理」という答えを確認するためにグーグルで検索しました。このソリューションについて読んで遊んでから何年も経ちました。

    オリジナル:

    READPASTヒントを使用すると、ロックされた行はスキップされます。 ROWLOCKを使用したので、ロックのエスカレーションを回避する必要があります。私が知ったように、UPDLOCKも必要です。

    したがって、プロセス1は20行をロックし、プロセス2は次の20行を取得し、プロセス3は行41から60を取得します。

    アップデートは次のように書くこともできます:

    UPDATE TOP (20)
        foo
    SET
        ProcessorID = @PROCID
    FROM
        OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
    WHERE
        ProcessorID = 0
    

    更新、2011年10月

    これは、SELECTとUPDATEを一度に必要とする場合に、OUTPUT句を使用してよりエレガントに行うことができます。



    1. SQLiteでチェック制約を作成する

    2. SQLiteDiskIOExceptionエラーコード10:ディスクI/Oエラー

    3. MySQLで過去1か月のデータを取得する方法

    4. Oracleデータベースに一時テーブルをどのように作成しますか?