标题:
MSSQL中游标的使用
[打印本页]
作者:
chinanic
时间:
2008-8-7 17:04
标题:
MSSQL中游标的使用
马上奥运开幕了,做为地方门户,咳,总得有个奥运会报道吧,于是,折腾了一天,弄了个奥运会进程与奖牌排行,下面这个存储过程实现了奖牌榜的生成。
重点:
1、表变量的声明与使用,表变量不支持索引。
2、游标的使用,在存储过程中使用游标的 FEACH NEXT 对多行数据进行处理,游标使用完毕必须销毁。
CREATE PROCEDURE Olympic_Medal_Count
AS
--变量定义
DECLARE @Country varchar(50)
DECLARE @GoldenMedalNum int
DECLARE @SilverMedalNum int
DECLARE @CopperMedalNum int
DECLARE @i int
SET @i=0
--表变量
DECLARE @tmpTable table(
ID smallint IDENTITY(1,1),
Country varchar(50),
Gold int,
Silver int,
Copper int,
OrderNum int
)
--游标引用
DECLARE medal_cursor CURSOR FOR
SELECT COUNT(*) AS MedalNum, Country
FROM Olympic_Medals
WHERE (Medal = 1)
GROUP BY Country
ORDER BY MedalNum DESC
OPEN medal_cursor
--提取第一名
FETCH NEXT FROM medal_cursor
INTO @GoldenMedalNum,@Country
WHILE @@FETCH_STATUS = 0
BEGIN
SET @i=@i+1
--取该国家银牌
SELECT @SilverMedalNum=COUNT(*) From Olympic_Medals where Medal=2 and Country=@Country
--取该国家铜牌
SELECT @CopperMedalNum=COUNT(*) From Olympic_Medals where Medal=3 and Country=@Country
--将数据插入表变量
Insert Into @tmpTable Values(@Country,@GoldenMedalNum,@SilverMedalNum,@CopperMedalNum,@i)
FETCH NEXT FROM medal_cursor
INTO @GoldenMedalNum,@Country
END
SELECT * From @tmpTable
--关闭游标
CLOSE medal_cursor
--删除游标引用
DEALLOCATE medal_cursor
GO
复制代码
[
本帖最后由 chinanic 于 2008-8-7 17:17 编辑
]
欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/)
Powered by Discuz! 7.2