在T-SQL中,当迭代游标的结果时,在FETCH
循环之前重复WHILE
语句似乎是一种惯例。下面的示例来自Microsoft:
DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title FROM AdventureWorks2012.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
(注意
FETCH NEXT FROM Employee_Cursor;
如何出现两次。)如果
FETCH
选择了很长的变量列表,那么我们将有一个很大的重复语句,这很丑陋,当然还有“non-DRY”代码。我不知道后置条件流控制T-SQL语句,因此似乎我必须不得不求助于
WHILE(TRUE)
,然后在BREAK
不为零时求助于@@FETCH_STATUS
。我觉得这很笨拙。我还有什么其他选择?
最佳答案
简而言之,您不能...这就是SQL中大多数where语句的工作方式。您需要在循环之前获取第一行,然后在while语句中再次执行。
更好的问题是如何摆脱游标,并尝试在没有游标的情况下解决您的查询。
关于sql - 使用游标时,如何避免在T-SQL中复制FETCH?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12261566/