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

行ロック - 手動で使用

    私がお勧めするアプローチの種類は、レコードが処理されているかどうかを示す行に沿ってレコード内にフィールドを持つことです。次に、次の処理を行う「キューから次を読み取る」sproc を実装して、2 つのプロセスが同じレコードを取得しないようにします。

    BEGIN TRANSACTION
    
    -- Find the next available record that's not already being processed.
    -- The combination of UPDLOCK and READPAST hints makes sure 2 processes don't 
    -- grab the same record, and that processes don't block each other.
    SELECT TOP 1 @ID = ID
    FROM YourTable WITH (UPDLOCK, READPAST)
    WHERE BeingProcessed = 0
    
    -- If we've found a record, set it's status to "being processed"
    IF (@ID IS NOT NULL)
        UPDATE YourTable SET BeingProcessed = 1 WHERE ID = @ID
    
    COMMIT TRANSACTION
    
    -- Finally return the record we've picked up
    IF (@ID IS NOT NULL)
        SELECT * FROM YourTable WHERE ID = @ID
      

    これらのテーブル ヒントの詳細については、MSDN を参照してください。



    1. コードカバレッジ統計

    2. テーブルではなくデータベース全体に適用されるクエリを作成する

    3. SQLServerの数値関数の概要

    4. MySQL-PHPから日本語を挿入-エンコーディングの問題