首页 > 其他 > 详细

sp_helptext输出错行问题解决

时间:2014-02-17 10:27:54      阅读:372      评论:0      收藏:0      [点我收藏+]
  相信,大家对sp_helptext存储过程一定不陌生,它可以帮你快速获取存储过程等对象的定义。但它有一个致命的缺点就是:每行最多返回255个nvarchar类型的字符,假如有一个编写不规范的存储过程,它的某些行超出了255,则取出的定义内容,很可能出错。其实,对象的定义都已经完整地存储master库的sys.sql_modules视图中(兼容性视图为:sys.syscomments),下面介绍一个小方法来解决这个问题:
bubuko.com,布布扣
USE tempdb
GO

--创建测试存储过程
CREATE PROC dbo. Demo1
       @Length INT
AS
SET NOCOUNT ON
IF(@Length > 0 )
       PRINT >0
ELSE
       PRINT <=0

GO

--获取存储过程定义
DECLARE @ObjectName NVARCHAR( 50)
SET @ObjectName = NDemo1

SELECT ObjectDefinition =b. name FROM
(SELECT Content=CONVERT (XML, <root><v><![CDATA[ + REPLACE(OBJECT_DEFINITION (OBJECT_ID( @ObjectName)), CHAR(13 )+CHAR( 10), ]]></v><v><![CDATA[ ) + ]]></v></root>)) a
OUTER APPLY
(SELECT [name] = C. v.value (., NVARCHAR(MAX)) FROM a.Content .nodes( /root/v) C(v )) b

--直接拷贝结果
/*

--创建测试存储过程
CREATE PROC dbo.Demo1
      @Length INT
AS
SET NOCOUNT ON
IF(@Length > 0)
      PRINT ‘>0‘
ELSE
      PRINT ‘<=0‘

*/
bubuko.com,布布扣
     
  小结
  #1. 突破了每行255个字符的限制。每行字符长度无限制,输出总内容长度无限制。
  #2. 可以直接从表格结果集中粘贴出结果,而不用再切换到文本显示选项(Ctrl+T)或用PRINT函数打印到输出窗口(PRINT函数输出的最大长度为8000)
  #3. 果断定义成快捷键,放到SQL Prompt的Snippet Manager中

sp_helptext输出错行问题解决

原文:http://www.cnblogs.com/wwwwgou/p/3551786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!