如何在没有FETCH的情况下访问光标列.. INTO

时间:2009-08-19 08:23:30

标签: sql sql-server cursor

我正在使用SQL Server来构建存储过程,而我正在使用游标来遍历select语句

我将光标定义如下:

DECLARE @c_col1 varchar(max);
DECLARE @c_col2 varchar(max);

DECLARE c as CURSOR FOR 
SELECT col1, col2 
FROM table;

OPEN c;
FETCH NEXT FROM c INTO
@c_col1, @c_col2;

SELECT @c_col1, @c_col2;

有没有办法访问游标的列而不需要为每列声明变量并在FETCH子句中使用INTO?换句话说,是否可以使用:

DECLARE c as CURSOR FOR 
SELECT col1, col2 
FROM table;

OPEN c;
FETCH NEXT FROM c; 

SELECT c.col1, c.col2;

2 个答案:

答案 0 :(得分:3)

不,如果要将游标中的值存储在局部变量中而不是将它们返回给客户端,则必须这样做。

答案 1 :(得分:0)

如果这是你的整个程序(从OP问题开始):

DECLARE @c_col1 varchar(max);
DECLARE @c_col2 varchar(max);

DECLARE c as CURSOR FOR 
SELECT col1, col2 
FROM table;

OPEN c;
FETCH NEXT FROM c INTO
@c_col1, @c_col2;

SELECT @c_col1, @c_col2;

然后您可以执行以下操作以返回两列的结果集,无需任何游标:

SELECT top 1 col1, col2 
FROM table;