32

これを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を複製してもあまり意味がありません)


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

4

1 に答える 1

46

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

WHILE (1=1)
  BEGIN

  -- Do stuff...

  IF (some_condition is true)
     BREAK;

  END

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

于 2009-10-03T03:46:49.687 に答える