これを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ステートメントだけで行うことはできません。各行は一度だけ評価および更新されるため、この混乱を機能させるために私が理解できる唯一の方法はループです。
これは事実上、Do-Whileループです。
WHILE (1=1)
BEGIN
-- Do stuff...
IF (some_condition is true)
BREAK;
END
しかし、@ Joel Coehoornが指摘したように、常に最初にセットベースのアプローチを使用するようにしてください。集合演算を使用して解決する方法が考えられない場合にのみ、ループに頼ります。