Sql server T-SQL游标循环语法

Sql server T-SQL游标循环语法,sql-server,tsql,cursor,Sql Server,Tsql,Cursor,这只是一个我一直好奇的简单的风格问题 规范的仅向前游标循环如下所示 DECLARE table_data FORWARD_ONLY CURSOR FOR SELECT c1, c2 FROM t1; DECLARE @c1 int; DECLARE @c2 int; OPEN table_data; FETCH table_data INTO @c1, @c2; WHILE @@FETCH_STATUS = 0 BEGIN -- do something with @c1, @c2

这只是一个我一直好奇的简单的风格问题

规范的仅向前游标循环如下所示

DECLARE table_data FORWARD_ONLY CURSOR FOR
SELECT c1, c2
FROM t1;

DECLARE @c1 int;
DECLARE @c2 int;

OPEN table_data;
FETCH table_data INTO @c1, @c2;
WHILE @@FETCH_STATUS = 0 BEGIN
    -- do something with @c1, @c2
    FETCH table_data INTO @c1, @c2;
END;

CLOSE table_data;
DEALLOCATE table_data;
FETCH语句是逐字重复的,这是一个较小的代码风格问题。有什么理由认为这是“标准”循环,因为它可以像这样轻松地编写

OPEN table_data;
WHILE 1 = 1
    FETCH table_data INTO @c1, @c2;
    IF @@FETCH_STATUS != 0 BREAK;
    -- do something with @c1, @c2
END;
我并不是在寻找哪种方式更好的意见。我只是好奇,是否有理由第一种方式似乎是压倒性的标准,可以说它有这个缺点。无限循环版本是否存在我没有看到的问题


我猜原因是BREAK是最近添加的T-SQL,但我很难找到T-SQL语言的变更日志来证实这一假设。

当你看到游标时,一个更好的问题是“如何将其转化为基于集合的解决方案并完全消除此游标”。是的,我知道,我只是好奇为什么循环通常是以这种奇怪的方式编写的。为了回答你的问题,我个人不喜欢在任何语言中使用1=1时的循环。当你指望内部的东西总是控制循环时,很容易陷入无止境的循环。输入的第二个代码块将无限循环。你错过了开始。