2010-08-24 98 views
2

我已经写了波纹管光标:数据库问题

declare myCursor cursor 
    for select productID, productName from products 
declare @productID int 
declare @productName nvarchar(50) 

    open myCursor 
    fetch next from myCursor into @productID,@productName 
print @productID 
print @productName 
set @productID=0 
    set @productName='' 

    while @@FETCH_STATUS=0 
    begin 
    fetch next from myCursor into @productID,@productName 
    print @productID 
    print @productName 
    set @productID=0 
    set @productName='' 

    end 
close myCursor 
deallocate myCursor 

我希望它有一个名为RowNomber另一列在执行光标这显示每行的数量。我是否应该声明另一个varriabl等于1,并在开始块中加上1(+1)?有没有办法做到这一点? (我正在使用sql server 2008)

+0

顺便提一下,如果您将问题的标题标题为“数据库问题”,那么您可能会得到更多的观点/答案。 – Peter 2010-09-04 14:31:50

回答

1

最简单的方法可能就像您建议的那样。

另一种方法是将其添加到select声明如下

select ROW_NUMBER() over (order by (select 0)) As Rownumber, 
    productID, productName from products 
0

递增一个局部变量就可以了。

另一种选择是在您的SELECT中使用ROW_NUMBER() ranking function。像这样:

select productID, productName 
    , ROW_NUMBER() OVER(ORDER BY productID) AS rownum 
    from products 
+0

这不一定会返回正确的结果。在主查询中没有'order by',所以不能保证这些行实际上会按照'productID'的顺序返回 – 2010-08-24 12:06:24