您的位置:首页 > 数据库

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

2008-09-23 10:38 344 查看
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,1) AS 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--清除临时表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: