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 。

最重要的是,我正在寻找解决这个问题的不太脏的方法(在 WHILE 之前复制 UPDATE 对我来说没有太大意义,因为 UPDATE 语句可以任意长且复杂)


编辑:我要解决的问题涉及同一个表下的多个 UPDATE 语句,每个语句都从先前的迭代中获取和转换值。仅在一个大的 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 回答