如何在 SQL Server 中组织无限 while 循环?

How to organize infinite while loop in SQL Server?(如何在 SQL Server 中组织无限 while 循环?)
本文介绍了如何在 SQL Server 中组织无限 while 循环?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在 SQL Server 2005 中使用无限 WHILE 循环,并在特定条件下使用 BREAK 关键字退出.

I want to use infinite WHILE loop in SQL Server 2005 and use BREAK keyword to exit from it on certain condition.

while true 不起作用,所以我必须使用 while 1=1.有没有更好的方法来组织无限循环?

while true does not work, so I have to use while 1=1. Is there a better way to organize infinite loop ?

我知道我可以使用 goto,但是 while 1=1 begin ... end 在结构上看起来更好.

I know that I can use goto, but while 1=1 begin ... end looks better structurally.

推荐答案

除了 WHILE 1 = 1 正如其他答案所建议的那样,我经常在我的 SQL infintie"中添加超时"" 循环,如下例所示:

In addition to the WHILE 1 = 1 as the other answers suggest, I often add a "timeout" to my SQL "infintie" loops, as in the following example:

DECLARE @startTime datetime2(0) = GETDATE();

-- This will loop until BREAK is called, or until a timeout of 45 seconds.
WHILE (GETDATE() < DATEADD(SECOND, 45, @startTime))
BEGIN
    -- Logic goes here: The loop can be broken with the BREAK command.

    -- Throttle the loop for 2 seconds.    
    WAITFOR DELAY '00:00:02';
END

我发现上述技术在从 long 调用的存储过程中很有用轮询 AJAX 后端.在数据库端使用循环使应用程序不必不断访问数据库以检查新数据.

I found the above technique useful within a stored procedure that gets called from a long polling AJAX backend. Having the loop on the database-side frees the application from having to constantly hit the database to check for fresh data.

这篇关于如何在 SQL Server 中组织无限 while 循环?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)