相信,大家对sp_helptext存储过程一定不陌生,它可以帮你快速获取存储过程等对象的定义。但它有一个致命的缺点就是:每行最多返回255个nvarchar类型的字符,假如有一个编写不规范的存储过程,它的某些行超出了255,则取出的定义内容,很可能出错。其实,对象的定义都已经完整地存储在它所在数据库的sys.sql_modules视图中(兼容性视图为:sys.syscomments),下面介绍一个小方法来解决这个问题:
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 = N'Demo1' 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' */
     
  小结
  #1. 突破了每行255个字符的限制。每行字符长度无限制,输出总内容长度无限制。
  #2. 可以直接从表格结果集中粘贴出结果,而不用再切换到文本显示选项(Ctrl+T)或用PRINT函数打印到输出窗口(PRINT函数输出的最大长度为8000)
  #3. 果断定义成快捷键,放到SQL Prompt的Snippet Manager中
  #4. 看了下sp_helptext的定义了解到:#1.系统对象的object_id为负整数,用户对象的object_id为正整数 #2.syscomments视图text列类型为nvarchar(4000),也就是说,假设一个存储过程的内容长度为4001个字符,那么它将分2行存储在syscomments中 #3.sp_helptext输出结果以换行+回车(char(13)+char(10))为拆分输出行,如果输出行的长度大于255,则按每行最大255个字符再次拆分。

sp_helptext输出错行问题解决的更多相关文章

  1. Delphi如何找到出错行的行数!!

    Delphi之通过崩溃地址找出源代码的出错行 一 什么是MAP文件 什么是 MAP 文件?简单地讲, MAP 文件是程序的全局符号.源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方.任何时候 ...

  2. 在服务器上运行db:seed数据填充时,出错的问题解决

    在服务器上运行db:seed数据填充时,出错的问题解决 运行composer  dump-autoload

  3. 在springboot pom文件配置过程,`spring-boot-maven-plugin`配置出错的问题解决及配置过程出现问题的一些思考

    在springboot pom文件配置过程,spring-boot-maven-plugin配置出错的问题解决及配置过程出现问题的一些思考 解决方法一: 也是最简单的方法,可能是maven没有来得及导 ...

  4. MFC程序打开文件对话框出错的问题解决

    前几天从网上下了个图像分析的mfc小程序,是VC6的 用VC6在本地编译生成都没问题.执行起来弹出一个未处理的错误,程序崩溃退出. 想起来原来遇到过打开文件对话框方面的问题,当时项目时间紧张未能深究. ...

  5. scanf与gets函数混用 前后位置出错的问题解决

    scanf与gets函数混用 利用scanf函数从键盘接收一字符(或整数)时,它只读入字符(或整数)本身,而把字符(或整数)后的回车符留在输入缓冲区内:gets函数从标准的输入读取,如果使用gets函 ...

  6. ffmpeg在Win7 VS2010中debug通过,release出错的问题解决方法

    我所用的系统环境是Win7 32位操作系统+VS2010编译环境.所以在debug模式下调通之后,在Release模式下调试不通过,最后通过上网查资料和自己对比两个编译选项得出以下结论: 修改“项目- ...

  7. vim切换显示器乱行问题解决

    http://note.youdao.com/noteshare?id=ccdad950ca154a6b1597cbe2ede07b81

  8. python 里安装 tensorflow 后运行出错的问题解决

    如果出现一下错误: libcublas.so.8.0: cannot open shared object file: No such file or directory 原因是没有 cuda 环境, ...

  9. hive分区与实际分区文件不匹配导致spark读文件出错的问题解决

    先解释下,由于历史原因导致hive中的看到分区比hdfs中的文件夹不匹配,存在hive中分区数有,实际hdfs中无此文件夹. spark中通过sparkSQL读取hive中的该表时,将会出现异常. 解 ...

随机推荐

  1. leetcode382

    /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...

  2. python算法之归并排序

    归并排序 归并排序是采用分治法的一个非常典型的应用.归并排序的思想就是先递归分解数组,再合并数组. 将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相 ...

  3. MyBatis 学习记录4 MyBatis的一级缓存

    主题 分享记录一下MyBatis的一级缓存相关的学习. Demo public static void firstLevelCache() { init("mybatis-config.xm ...

  4. 清除html中的标记,只留下文字

    /// <summary>/// 清除html中的标记,只留下文字./// </summary>/// <param name="HTML">& ...

  5. Java Socket编程之TCP

    基于TCP的Socket通信: 服务器端: 创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 调用accept()方法开始监听,等待客户端的连接 连接建立后,通过 ...

  6. mysql 去重

    select *, count(distinct name) from table group by name http://blog.sina.com.cn/s/blog_7e7249c301012 ...

  7. Asp.net 使用Neatupload 第三方控件上传大文件,在IIS7上无法正常工作解决

    使用环境:Window Server2008 + IIS7 更改web.config配置 1.在<configSections></configSections>节内加入: & ...

  8. nodejs中yield的用法?

    nodejs中yield的用法? https://www.zhihu.com/question/32752866?sort=created

  9. iOS调试程序的方法

    IOS各种调试技巧豪华套餐 普通操作 如图3 基本的断点操作如下 图4 点击那个黑列列就创建了一个断点,再次点击就临时取消这个断点(但是不删除),长按那个断点拖出去就删除了(mac os的系统工程师就 ...

  10. RTX二次开发笔记1

    在客户端,一个rtx用户给另一个rtx用户发送消息! 我的解决方案:在rtx服务端部署一个 wcf服务 或 webservice 服务,然后程序在客户端调用服务就行. 1,C#版 (服务端需要4个DL ...