использование курсоров и отображение номеров строк - PullRequest
0 голосов
/ 31 августа 2010

Я объявил следующий курсор и использовал локальную переменную @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 Ответ

2 голосов
/ 31 августа 2010

Я не совсем понимаю, чего вы пытаетесь достичь - но вы можете заключить свой оператор select, включая функцию ROW_NUMBER(), в CTE (общее табличное выражение), а затем перейти оттуда - не нужен грязный курсор, действительно плохо масштабируется:

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

Это должно дать вам названия продуктов, отсортированные по ProductName, и соответствующие номера строк.

...