重点:
1、表变量的声明与使用,表变量不支持索引。
2、游标的使用,在存储过程中使用游标的 FEACH NEXT 对多行数据进行处理,游标使用完毕必须销毁。
CODE:
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 编辑 ]