我想在SQL Server2005中使用无限WHILE循环,并在一定条件下使用BREAK关键字退出。
while true不工作,所以我必须使用while 1=1。有没有更好的方法来组织无限循环?
我知道我可以使用goto,但是while 1=1 begin ... end在结构上看起来更好。
发布于 2010-03-17 00:56:54
除了其他答案建议的超时之外,我还经常在我的SQL "infintie“循环中添加一个”WHILE 1 = 1“,如下面的示例所示:
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 polling AJAX后端调用的存储过程中很有用。将循环放在数据库端可以使应用程序不必不断地访问数据库来检查新数据。
发布于 2010-03-17 00:51:05
使用带有Break语句的While 1 = 1就是这样做的。T-SQL中没有TRUE或FALSE的常量。
发布于 2010-03-17 00:51:34
如果你真的必须使用无限循环,那么使用while 1=1就是我的方式。
这里的问题是,没有其他方法来避免无限循环吗?这些事情往往会出错;)
https://stackoverflow.com/questions/2456330
复制相似问题