如何在tsql中实现do-while循环

Rod*_*igo 30 sql t-sql sql-server while-loop flow-control

我试图想出如何在TSQL中实现它

do 
  update stuff set col = 'blah' where that_row = 'the right one'
  select trash from stuff ...
until some_condition
Run Code Online (Sandbox Code Playgroud)

Transact-SQL提供的唯一迭代控制流句是while (condition) sentences首先评估条件,如果该条件为真,则执行该句子.

我正在思考一个场景,比如在表上执行UPDATE语句,直到某个条件被触发,直到执行了最后一个UPDATE.

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


编辑:我正在尝试解决的问题涉及同一个表下的多个UPDATE语句,每个语句都采用并转换前一次迭代的值.这在一个大的UPDATE语句中是不可能的,因为每行只会被评估和更新一次,所以循环是我能弄清楚这个混乱工作的唯一方法.

Mit*_*eat 43

这实际上是一个Do-While循环:

WHILE (1=1)
  BEGIN

  -- Do stuff...

  IF (some_condition is true)
     BREAK;

  END
Run Code Online (Sandbox Code Playgroud)

但正如@Joel Coehoorn指出的那样,总是首先尝试使用基于集合的方法.如果我想不出解决使用set操作的方法,我只会求助于循环.

  • 这样可行,但是如果在生产代码中写"1 = 1"并不令人沮丧... (9认同)
  • @Factor Mystic:你会惊讶地发现你会看到'1 = 1'多少次但是在哪里有条款,但这是另一个故事...... (2认同)