web-dev-qa-db-ja.com

SQLでdo-whileループを実装する方法

これをTSQLに実装する方法を理解しようとしています

_do 
  update stuff set col = 'blah' where that_row = 'the right one'
  select trash from stuff ...
until some_condition
_

Transact-SQLによって提供される唯一の反復制御フローセンテンスはwhile (condition) sentencesであり、最初に条件を評価し、その条件が真の場合はセンテンスを実行します。

最後に実行されたUPDATEが達成されるまで、何らかの条件がトリガーされるまで、テーブルに対してUPDATEステートメントを実行するようなシナリオを考えています。

最も重要なのは、この問題に対する汚れの少ないアプローチを探していることです(UPDATE文は任意に長く複雑になる可能性があるため、WHILEの前にUPDATEを複製してもあまり意味がありません)


[〜#〜] edit [〜#〜]:私が解決しようとしている問題には、同じテーブルの下にある複数のUPDATEステートメントが含まれ、それぞれが前の反復からの値を取得して変換します。これは、1つの大きなUPDATEステートメントだけで行うことはできません。各行は一度だけ評価および更新されるため、この混乱を機能させるために私が理解できる唯一の方法はループです。

29
Rodrigo

これは事実上、Do-Whileループです。

WHILE (1=1)
  BEGIN

  -- Do stuff...

  IF (some_condition is true)
     BREAK;

  END

しかし、@ Joel Coehoornが指摘したように、常に最初にセットベースのアプローチを使用するようにしてください。集合演算を使用して解決する方法が考えられない場合にのみ、ループに頼ります。

41
Mitch Wheat