博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 存储过程 sp_helptext的不足以及解决方案
阅读量:5283 次
发布时间:2019-06-14

本文共 2014 字,大约阅读时间需要 6 分钟。

介绍sp_helptext 前 先介绍下系统表sys.syscomments   以及  系统视图   sys.sql_modules。

sys.syscomments:包含数据库中每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的项。text 列包含原始的 SQL 定义语句。(简单点说,这个系统表存储了我们创建的存储过程、视图等的源码,通过查询该系统表可以查看创建的存储过程等源码。SQL Server2000引入

sys.sql_modules:对每个 SQL 语言定义的模块对象都返回一行。类型为 P、RF、V、TR、FN、IF、TF 和 R 的对象均有关联的 SQL 模块。在此视图中,独立的默认值,即 D 类型的对象也具有 SQL 模块定义。(SQL Server 2005引入

 以上两句话来自于SQL Server的本地帮助文档中。在查看sys.syscomments的说明时,有一个重要的提示:

点击 SQL Server 2000系统表映射到 SQL Server 2005 系统视图,找到:

意思是说,建议改用视图sys.sql_modules来代替sys.syscomments系统表。

sp_helptext 是MS SQL Server的一个系统存储过程,可以通过它来查看存储过程或者视图源码(最好的方式是通过设置快捷键绑定存储过程,这样效率比较高),

但是这个存储过程又几个不好的地方:

1、它会帮你格式化代码  

2、当一行长度超过一定后,它给你分行显示(当一行代码过长时,这个烦人的问题就来了)

这样代码就显得比较难看了。。相信用过sp_helptext存储过程的都知道这个问题。
当然可以通过右键存储过程名称 然后点击修改 ,也能显示源码。并且代码格式完好无损。但是无法绑定快捷键。效率低。
解决方案:就是借助sys.syscomments或者sys.sql_modules 自己写一个存储过程 来显示源码,使其格式不乱。并且可以绑定快捷键。

鉴于微软的重要提示,所以在这里,使用sys.sql_modules:

--Siuon --查看存储过程源码 create procedure mp_helptext( @name varchar(255) ) as declare @object_id int, @sourcecode varchar(max), @line varchar(max), @end int, @rn varchar(2), @tab varchar(1) declare @source table( source varchar(max) ) set @rn = char(13)+char(10) set @tab = char(9) select @sourcecode = definition from sys.sql_modules where object_id=object_id(@name) while(charindex(@rn,@sourcecode)!=0) begin set @end=charindex(@rn,@sourcecode) set @line = replace(substring(@sourcecode,1,@end-1),@tab,@tab+@tab) if(charindex('create',@line)<>0 and (charindex('proc',@line)<>0 or charindex('view',@line)<>0 or charindex('function',@line)<>0 or charindex('trigger',@line)<>0)) begin set @line = replace(@line,'create','alter') end insert into @source(source) values(@line) set @end = @end + 2 set @sourcecode = substring(@sourcecode,@end,len(@sourcecode)) end insert into @source(source) values(@sourcecode) select * from @source

设置SQL Server 快捷键 绑定 该存储过程:

SQL Server菜单  工具--选项--环境--键盘:   在这里我是设置的Ctrl+F1键  对应刚刚的存储过程名。

点击确定后,重启SQL Server Manage Studio,一定要重启哦,否则不生效。

转载于:https://www.cnblogs.com/springside6/archive/2012/04/12/2525105.html

你可能感兴趣的文章
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
根据xml生成相应的对象类
查看>>
Android StageFrightMediaScanner源码解析
查看>>
打包java程序生成exe
查看>>
八叉树
查看>>
Git 远程仓库
查看>>
关于静态文本框透明度的问题
查看>>
javascript的发展及个人笔记
查看>>
全选,反全选,反选,获取选中的值,根据子选择控制全选按钮
查看>>
[CF#250 Div.2 D]The Child and Zoo(并查集)
查看>>
博客园博客插入公式
查看>>
hdu 1028 Ignatius and the Princess III(母函数入门+模板)
查看>>
Ubuntu下配置安装telnet server
查看>>
Codeforces 235 E Number Challenge
查看>>
ubuntu 常见命令整理
查看>>
EJBCA安装教程+postgresql+wildfly10
查看>>