使用目的,利用以时间等条件参照其他表格,将会议目录抽取出来(游标的执行结果),然后以添加其他的文字形式对
结果进行修饰,由于最终目的是将会议目录以邮件的形势发布出去,所以单一的数据行查询的话,无法满足我想要得
集合结果(根据数据库设计方式不同),所以利用触发器来接受由外部发来的参数,然后利用游标将参数为条件提取数
据集,就是这样。
触发器游标部分的SQL文内容:
DECLARE @ROWSPACE VARCHAR(MAX)
DECLARE @CHARSPACE VARCHAR(MAX)
DECLARE @KARAMARK VARCHAR(6)
DECLARE @PART VARCHAR(MAX)
DECLARE @UNIONALL VARCHAR(MAX)
SET @ROWSPACE = CHAR(13)+ CHAR(10) -- 改行
SET @CHARSPACE = ' ' -- 空格
SET @KARAMARK = ' ~ '
SET @LIST_CD = (SELECT LIST_CD FROM MST_MEETING WHERE YEAR = @param_YEAR AND MEETING_CD = @param_MEETING_CD)
SET @PART = ''
SET @UNIONALL = ''
BEGIN
DECLARE LOOP_T CURSOR FOR --游标的宣言
-- 以条件提取结果集的一部分
SELECT
@CHARSPACE + ISNULL(CONVERT(VARCHAR(10), DATE, 111), '')
+ @CHARSPACE + ISNULL(NAME, '')
+ @CHARSPACE + ISNULL(CONVERT(VARCHAR(5), START_TIME, 108), '')
+ @KARAMARK + ISNULL(CONVERT(VARCHAR(5), END_TIME, 108), '') AS DETAILS
FROM T_MEETING_LIST WHERE YEAR = @param_YEAR AND MEETING_CD = @param_MEETING_CD
--打开游标
OPEN LOOP_T;
-- 将提取结果带入游标
FETCH NEXT FROM LOOP_T INTO @PART;
WHILE @@FETCH_STATUS = 0 BEGIN
-- 对游标内容进行修饰,如该行
SET @UNIONALL = @UNIONALL + @ROWSPACE + @PART
-- 将修饰内容代入游标
FETCH NEXT FROM LOOP_T INTO @PART;
END;
-- 关闭游标
CLOSE LOOP_T;
-- 解除游标参照
DEALLOCATE LOOP_T;
-- 将游标内容代入最后结果(执行结果的红色部分)
SELECT DATE+'会议目录:' + @ROWSPACE + @UNIONALL
END
执行结果:
-----------------------------------------------------------------------------------------------------------
2008-12-26 会议目录:
2008-12-26 会议1 10:00 ~ 12:00
2008-12-26 会议2 13:00 ~ 14:00
2008-12-26 会议3 14:10 ~ 15:30
2008-12-26 会议4 15:40 ~ 17:00
http://hi.baidu.com/mali1979/blog/item/6d74b410ffd9b2fbc2ce79b6.html