我已声明了以下光标并使用了局部变量@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
?
答案 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
排序,以及相应的行号。