[SQL Server] 游标的简单使用

测试用例:

表一:

ID  NAME  QQ      PHONE
------------------------------------------

1   秦云   10102800   13500000
2   在路上  10378       13600000
3   LEO   10000     13900000

表二

ID  NAME  上机时间    管理员
------------------------------------------

1   秦云   2004-01-01   李大伟
2   秦云   2005-01-01       马化腾
3   在路上  2005-01-01       马化腾
4   秦云   2005-01-01       李大伟
5   在路上  2005-01-01       李大伟
6   陈扬   2006-01-01       李彦宏

目的:从表1中取所有人员列表,从表2中取上机次数和管理员.

获取管理员拼接串

CREATE FUNCTION GetNameStr(@name NVARCHAR(200))
RETURNS NVARCHAR(200)
AS
BEGIN
DECLARE @temp NVARCHAR(200)
,
@reValue NVARCHAR(200)

DECLARE myCur CURSOR FOR
(
SELECT 管理员 from LogInfo
WHERE NAME = N'秦云'
)

OPEN myCur
FETCH NEXT FROM myCur INTO @temp

WHILE @@FETCH_STATUS = 0
BEGIN
SET @reValue = ISNULL(@reValue + N',','') + @temp

FETCH NEXT FROM myCur INTO @temp
END

CLOSE myCur
DEALLOCATE myCur

RETURN @reValue
END

主查询:

SELECT NAME,COUNT(ID) 上机次数,dbo.GetNameStr(NAME)
FROM LogInfo T2
WHERE EXISTS
(
SELECT 1
FROM StuInfo T1
WHERE T1.NAME = T2.NAME
)
GROUP BY NAME

结果:

NAME    上机次数   (无列名)

------------------------------------

秦云   3   李大伟,马化腾,李大伟
在路上  2   李大伟,马化腾,李大伟

posted @ 2011-04-23 19:57  RyanBell  阅读(228)  评论(0编辑  收藏  举报