SQL server 2012 SP_HELPTEXT额外行问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

我正在使用sql server 2012&始终使用SP_HELPTEXT为了获得以前创建的存储过程,在sql server的早期版本中,这个过程中没有问题,但是在2012,我的存储过程附带了额外的行,例如,这就是我编写的过程。

Create proc SP_Test
as
begin
 Select * 
 from table_ABC
end

现在在使用之后SP_HELPTEXT使用此过程(或任何其他过程),我将得到以下输出

Create proc SP_Test

as

begin

 Select * 

 from table_ABC

end

还有其他人也面临这个问题吗?还是我是这个星球上唯一一个为这个问题而奋斗的人?有没有人知道如何解决这个问题?

我的SQL服务器的配置如下(从帮助->关于)

Microsoft SQL Server Management Studio          11.0.2100.60
Microsoft Analysis Services Client Tools        11.0.2100.60
Microsoft Data Access Components (MDAC)         6.1.7601.17514
Microsoft MSXML                     3.0 6.0 
Microsoft Internet Explorer             9.0.8112.16421
Microsoft .NET Framework                4.0.30319.269
Operating System                    6.1.7601

提前结束。

提问于
用户回答回答于

最简单的解决办法是运行sp_helptext with Results to text集合(Query->Results to>Results to text、快捷键:CTRL+T

您可能需要增加Results to text为了得到输出-Tools>Options>Query Results>Results to text,将“每列显示的最大字符数”设置为最大值8192。

用户回答回答于
CREATE PROCEDURE [dbo].[sp_helptext2] (@ProcName NVARCHAR(256))
AS
BEGIN
  DECLARE @PROC_TABLE TABLE (X1  NVARCHAR(MAX))

  DECLARE @Proc NVARCHAR(MAX)
  DECLARE @Procedure NVARCHAR(MAX)
  DECLARE @ProcLines TABLE (PLID INT IDENTITY(1,1), Line NVARCHAR(MAX))

  SELECT @Procedure = 'SELECT DEFINITION FROM '+db_name()+'.SYS.SQL_MODULES WHERE OBJECT_ID = OBJECT_ID('''+@ProcName+''')'

  insert into @PROC_TABLE (X1)
        exec  (@Procedure)

  SELECT @Proc=X1 from @PROC_TABLE

  WHILE CHARINDEX(CHAR(13)+CHAR(10),@Proc) > 0
  BEGIN
        INSERT @ProcLines
        SELECT LEFT(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)-1)
        SELECT @Proc = SUBSTRING(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)+2,LEN(@Proc))
  END
  --* inserts last line
  insert @ProcLines 
  select @Proc ;

  SELECT Line FROM @ProcLines ORDER BY PLID
END

扫码关注云+社区

领取腾讯云代金券