返回列表 发帖

MSSQL中游标的使用

马上奥运开幕了,做为地方门户,咳,总得有个奥运会报道吧,于是,折腾了一天,弄了个奥运会进程与奖牌排行,下面这个存储过程实现了奖牌榜的生成。

重点:
1、表变量的声明与使用,表变量不支持索引。
2、游标的使用,在存储过程中使用游标的 FEACH NEXT 对多行数据进行处理,游标使用完毕必须销毁。
  1. CREATE PROCEDURE Olympic_Medal_Count

  2. AS
  3. --变量定义
  4. DECLARE @Country varchar(50)
  5. DECLARE @GoldenMedalNum int
  6. DECLARE @SilverMedalNum int
  7. DECLARE @CopperMedalNum int
  8. DECLARE @i int
  9. SET @i=0
  10. --表变量
  11. DECLARE @tmpTable table(
  12.         ID smallint IDENTITY(1,1),
  13.         Country varchar(50),
  14.         Gold int,
  15.         Silver int,
  16.         Copper int,
  17.         OrderNum int

  18. )

  19. --游标引用
  20. DECLARE medal_cursor CURSOR FOR
  21. SELECT COUNT(*) AS MedalNum, Country
  22.         FROM Olympic_Medals
  23.         WHERE (Medal = 1)
  24.         GROUP BY Country
  25.         ORDER BY MedalNum DESC
  26. OPEN medal_cursor
  27. --提取第一名
  28. FETCH NEXT FROM medal_cursor
  29. INTO @GoldenMedalNum,@Country

  30. WHILE @@FETCH_STATUS = 0
  31.         BEGIN
  32.                 SET @i=@i+1
  33.                 --取该国家银牌
  34.                 SELECT @SilverMedalNum=COUNT(*) From Olympic_Medals where Medal=2 and Country=@Country
  35.                 --取该国家铜牌
  36.                 SELECT @CopperMedalNum=COUNT(*) From Olympic_Medals where Medal=3 and Country=@Country
  37.                 --将数据插入表变量
  38.                 Insert Into @tmpTable Values(@Country,@GoldenMedalNum,@SilverMedalNum,@CopperMedalNum,@i)
  39.                 FETCH NEXT FROM medal_cursor
  40.                 INTO @GoldenMedalNum,@Country

  41.         END

  42. SELECT * From @tmpTable
  43. --关闭游标
  44. CLOSE medal_cursor
  45. --删除游标引用
  46. DEALLOCATE medal_cursor
  47. GO
复制代码

[ 本帖最后由 chinanic 于 2008-8-7 17:17 编辑 ]
天行健,君子以自强不息
地势坤,君子以厚德载物
黑色海岸线欢迎您

QQ群:7212260
致力于探索WEB技术精髓:http://www.bitechcn.com
点这里加我!

返回列表 回复 发帖