0

我已经声明了以下游标并使用了一个局部变量@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

4

1 回答 1

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和相应的行号。

于 2010-08-31T15:11:57.473 回答