Tsql 使用游标遍历数据集

Tsql 使用游标遍历数据集,tsql,sql-server-2012,cursor,iteration,Tsql,Sql Server 2012,Cursor,Iteration,我使用光标遍历数据集,逐个检查每条记录的特定列(Myfield)的值。我知道这与SQL分析数据集的方式相反,但在这种情况下我必须使用这种方法 是否可以编写一个条件来检查已定义列的值?差不多 If Myfield = 0 @number = @number + 1 ELSE @number = @number + 2 我对游标的定义如下: SET @MyCursor = CURSOR FOR SELECT * FROM Table1

我使用光标遍历数据集,逐个检查每条记录的特定列(
Myfield
)的值。我知道这与SQL分析数据集的方式相反,但在这种情况下我必须使用这种方法

是否可以编写一个条件来检查已定义列的值?差不多

If Myfield = 0 
    @number = @number + 1
ELSE 
    @number = @number + 2
我对游标的定义如下:

SET @MyCursor = CURSOR FOR 
                    SELECT * FROM Table1
但显然这对于T-SQL来说还不够——它会抛出错误

无效的列名


您需要为所需的结果集声明游标,并为要比较的行中的每个字段声明变量

DECLARE @myField AS INT

DECLARE my_cursor CURSOR FOR
SELECT compareField FROM Table1

OPEN my_cursor

FETCH NEXT FROM my_cursor   
INTO @myField  

WHILE @@FETCH_STATUS = 0  
BEGIN
    If @myField = 0 THEN
         --do something--
    ELSE 
         --do something else--
    END IF

    FETCH NEXT FROM my_cursor
    INTO @myField
END

CLOSE my_cursor
DEALLOCATE my_cursor

提示:部分解决方案可能涉及[
case
]()表达式(非语句),例如,
设置@Foo+=case,当@Bar=0时,则设置1,否则2结束