使用游标并显示行号

时间:2010-08-31 14:48:46

标签: sql-server sql-server-2008 cursors

我已声明了以下光标并使用了局部变量@RowNo来打印每行的编号。

  declare TheCursor cursor 
  for select productName from products
  declare @RowNo int 
  declare @productName nvarchar(50)
  set @RowNo = 1
  open TheCursor
  fetch next from TheCursor into @productName
  print @RowNo
  print @productName
  set @RowNo = @RowNo+1
  set @productName=''

 while @@FETCH_STATUS=0
    begin
     fetch next from TheCursor into @productName
     print @RowNo
     print @productName
     set @RowNo = @RowNo+1
     set @productName=''
    end
 close TheCursor
 deallocate TheCursor

我正在尝试找到任何其他方法来为每行分配/定义一个数字并在控制台中显示它。我找到了函数Row_number(),并像select ROW_NUMBER() over (order by (select 0)) As Rownumber一样使用它来完成它。

我想知道是否可以使用光标中的KEYSET来执行此操作?我怎样才能使用KEYSET

1 个答案:

答案 0 :(得分:2)

我并不完全理解你想要实现的目标 - 但你可以将包含ROW_NUMBER()函数的select语句包装到CTE(公用表表达式)中然后从那里开始 - 不需要杂乱的游标,这真的不能很好地扩展:

WITH YourSelection AS
(
   SELECT    
      ProductName,
      ROW_NUMBER() OVER(ORDER BY ProductName) AS 'RowNum'
   FROM dbo.Products
)
SELECT ProductName, RowNum
FROM YourSelection

这应该为您提供产品名称,按ProductName排序,以及相应的行号。