如何在tsql中实现do while循环
我试图弄清楚如何在TSQL中实现这一点如何在tsql中实现do while循环,sql,sql-server,tsql,while-loop,control-flow,Sql,Sql Server,Tsql,While Loop,Control Flow,我试图弄清楚如何在TSQL中实现这一点 do update stuff set col = 'blah' where that_row = 'the right one' select trash from stuff ... until some_condition Transact-SQL提供的唯一迭代控制流语句是而(condition)语句,它首先计算条件,如果该条件为真,则执行该语句 我想在一个场景中,比如在一个表上执行一个UPDATE语句,直到最后一次执行的更新达到某个条件
do
update stuff set col = 'blah' where that_row = 'the right one'
select trash from stuff ...
until some_condition
Transact-SQL提供的唯一迭代控制流语句是而(condition)语句
,它首先计算条件,如果该条件为真,则执行该语句
我想在一个场景中,比如在一个表上执行一个UPDATE语句,直到最后一次执行的更新达到某个条件为止
最重要的是,我正在寻找解决这个问题的不那么肮脏的方法(在WHILE之前复制更新对我来说没有太大意义,因为更新语句可以任意长和复杂)
编辑:我试图解决的问题涉及同一个表下的多个UPDATE语句,每个语句都从以前的迭代中获取并转换值。这不可能只在一个大的UPDATE语句中完成,因为每一行只会被计算和更新一次,所以循环是我唯一能解决这个问题的方法。这实际上是一个do-While循环:
WHILE (1=1)
BEGIN
-- Do stuff...
IF (some_condition is true)
BREAK;
END
但正如@joelcoehoorn所指出的,总是首先尝试使用基于集合的方法。只有当我想不出使用集合操作解决问题的方法时,我才会求助于循环。如果你想对数据库代码进行流控制,那你就错了。别那么死板,有时候业务逻辑需要在存储过程中开发。@rodrigo,他是;谈到它是一个存储过程,他说的是使用集合论,而不是looop。在99%的时间里可以避免循环,如果可以的话,最好这样做。@HLGEM你读过我问题的编辑部分了吗?你是对的,99%的情况下,一个正确构建的查询都能解决所有问题,我是这样问的,因为有时候你不得不处理这样的情况:1%…1不是布尔值,而不是(1=1)可以完成这项工作。此解决方案有效且非常简单。看了之后似乎很明显!非常感谢。@Factor Mystic:您可能会惊讶地看到有多少次“1=1”,但在where子句的上下文中,这是另一个故事……只是想补充一点,while()不是必需的,除非它是某种选择。