为了账号安全,请及时绑定邮箱和手机立即绑定

求教,SQL server存储过程该怎么理解。

求教,SQL server存储过程该怎么理解。

元芳怎么了 2018-12-07 07:50:03
希望路过的高手指点迷津,新手表示看不懂。 在书上看到一个SQL实现动态交叉表的例子,可是里面的存储过程看不懂,请问这该怎么理解以下的代码: CREATE procedure proc_across_table @TableName as varchar(50), --生成交叉表依据的表名 @NewColumn as varchar(50), --生成表头依据的字段名 @GroupColumn as varchar(50), --分组依据的字段名 @StatColumn as varchar(50), --欲统计的字段名 @Operator as varchar(10) --统计的运算方式 AS DECLARE @SQL as varchar(1000), @Column as varchar(50) --定义参数 EXECUTE ('DECLARE cursor_new_column CURSOR FOR SELECT DISTINCT ' + @NewColumn + ' from ' + @TableName + ' for read only ') --定义游标 begin SET nocount ON SET @SQL='select ' + @GroupColumn + ', ' + @Operator + '(' + @StatColumn + ') AS [' + @Operator + ' of ' + @StatColumn + ']' --定义SQL语句头 OPEN cursor_new_column while (0=0) BEGIN --遍历游标 FETCH NEXT FROM cursor_new_column INTO @Column --通过游标获取列头信息 if (@@fetch_status<>0) break SET @SQL = @SQL + ', ' + @Operator + '(CASE ' + @NewColumn + ' WHEN ''' + @Column + ''' THEN ' + @StatColumn + ' ELSE Null END) AS [' + @Column + ']' --循环追加SQL语句 END SET @SQL = @SQL + ' from ' + @TableName + ' group by ' + @GroupColumn --定义SQL语句尾 EXECUTE(@SQL) --执行SQL语句 PRINT @SQL --输出SQL语句 IF @@error <>0 RETURN @@error --如果出错,则返回错误代码 CLOSE cursor_new_column --关闭游标 DEALLOCATE cursor_new_column RETURN 0 --释放游标,释放成功则返回0 end GO
查看完整描述

5 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

SET @SQL = @SQL + ' from ' + @TableName + ' group by ' + @GroupColumn --定义SQL语句尾

-----这儿加一句

Select @SQL

---就会把@SQL显示出来了。

EXECUTE(@SQL) --执行SQL语句

查看完整回答
反对 回复 2019-01-07
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

你执行一下sql,你先看一下效果,然后按照代码的注释一遍一遍看看。注释写的很清楚啊!

查看完整回答
反对 回复 2019-01-07
?
largeQ

TA贡献2039条经验 获得超7个赞

开始学习的时候,书上肯定有由浅到深的东西..我一开始和你一样,都想全弄懂,这样这本书看一遍就算完了.

 

后来发现书上的好多东西,平时工作中只用到一些基本的..高深的不是很常用,可以等着以后必须用的时候才来学.

这样不耽误学习进度,也不打击学习的信心.而且学了就能用上..不太懂的先放一放.

查看完整回答
反对 回复 2019-01-07
  • 5 回答
  • 0 关注
  • 479 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信