6

SELECTを実行してIDのリストを取得し、それらのIDに基づいて更新を実行してから、それらのレコードを返します。

このようなものだと思いますが、構文がわかりません。

  SELECT WebHookLogIDs = FROM WebHookLog 
                WHERE Processing=0
                    AND Processed=0
                        AND Paused=0
                            ORDER BY FailCount ASC, WebHookLogID DESC

    UPDATE WebHookLog
        SET Processing = 1
            WHERE WebHookLogID IN(WebHookLogIDs)

    SELECT * FROM WebHookLog 
            WHERE WebHookLogID IN(WebHookLogIDs)
4

3 に答える 3

8

データをTempテーブルに挿入するよりも、 Tempテーブルにデータを挿入する方が良いと思います

最後にそれらのレコードを返したいので、一時テーブルを使用する必要があります

DECLARE @Table1 TABLE (WebHookLogIDs INT)

Insert into @Table1(WebHookLogIDs )
SELECT WebHookLogIDs  FROM WebHookLog 
                WHERE Processing=0
                    AND Processed=0
                        AND Paused=0
                            ORDER BY FailCount ASC, WebHookLogID DESC

    UPDATE WebHookLog
        SET Processing = 1
            WHERE WebHookLogID IN( select WebHookLogIDs from @Table1)

    SELECT * FROM WebHookLog 
            WHERE WebHookLogID IN(select WebHookLogIDs from @Table1)
    DROP TABLE @Table1
于 2013-01-15T12:57:07.583 に答える
3

同じSQLステートメントUPDATEを使用することはできません。SELECTただし、次のようにIDを選択する代わりに使用UPDATEできます。JOIN

UPDATE w1
SET w1.Processing = 1
FROM WebHookLog w1
INNER JOIN WebHookLog w2  ON w1.WebHookLogID = w2.WebHookLogID 
                         AND w2.Processing    = 0
                         AND w2.Processed     = 0
                         AND w2.Paused        = 0;

SELECT後で、別の句を実行できます。

于 2013-01-15T12:53:46.867 に答える
1

このようなもの?

WebHookLogを更新
SET PROCESSING = 1
WHERE WebHookLogID IN(SELECT WebHookLogIDs = FROM WebHookLog
                WHERE処理=0
                    AND処理済み=0
                        AND Paused = 0)

SELECT * FROM WebHookLog
WHERE WebHookLogID IN(WebHookLogIDs)

于 2013-01-15T12:52:56.727 に答える