周广明的博客

.Net & MS SQL Tech
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SQL 2005中实现循环每一行做的操作

Posted on 2008-09-23 10:38  Zhougm  阅读(842)  评论(0)    收藏  举报
SQL Server 2005中ROW_NUMBER()用法,简单介绍下,还是很有用的。
       如果我们想对一个表的每一行做出比较复杂的操作,大多会想到用游标,
       换一种思路,用IDENTITY或SQL  Server 2005中的新函数ROW_NUMBER()和while循环来对每一行执行操作,这样就可以不用游标。
详细的示例代码如下:
---(一)游标方式
Declare @iSN varchar(16)
Declare iCursor Cursor For
     
select Distinct Serial_Number from PQC_Statistic
        
where TransDateTime like '2008092310%'
Open iCursor
FETCH Next from iCursor Into @iSN--用来对每一行来进行循环操作 
WHILE @@FETCH_STATUS = 0
Begin
    
--此处对每一行要进行的操作的代码 
    Fetch Next from iCursor into @iSN
END
CLOSE iCursor
DEALLOCATE iCursor

-------------------------------------------------------------------------------------
--
-(二)Identity方式
select * from PQC_Statistic
    
where TransDateTime like '2008092310%'

select Serial_Number,IDENTITY(INT,1,1AS RowNumber
    
into #TempSN
    
from PQC_Statistic 
    
where transdatetime like '2008092310%'
    
ORDER BY Serial_Number

Declare @maxRow int --用来获得最大的rowNumber 
Declare @rowNo int 
Select @maxRow=max(rownumber) from #TempSN 
set @rowNo=1 
While @rowNo<=@maxRow --用来对每一个rowNumber来进行循环操作 
Begin 
    
--此处对每一行要进行的操作的代码 
    Set @rowNo=@rowNo+1 
End 
Drop Table #TempSN--清除临时表
--
-----------------------------------------------------------------------------------
--
-(三)RowNumber方式
select * from PQC_Statistic
    
where TransDateTime like '2008092310%'

select Serial_Number,ROW_NUMBER() OVER(ORDER BY Serial_Number) AS RowNumber
    
into #TempSN
    
from PQC_Statistic 
    
where transdatetime like '2008092310%'

Declare @maxRow int --用来获得最大的rowNumber 
Declare @rowNo int 
Select @maxRow=max(rownumber) from #TempSN 
set @rowNo=1 
While @rowNo<=@maxRow --用来对每一个rowNumber来进行循环操作 
Begin 
    
--此处对每一行要进行的操作的代码 
    Set @rowNo=@rowNo+1 
End 
Drop Table #TempSN--清除临时表