SQL Server 2012 SP_HELPTEXT额外行问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 2012 SP_HELPTEXT额外行问题相关的知识,希望对你有一定的参考价值。
我正在使用SQL Server 2012,并始终使用SP_HELPTEXT
来获取我以前创建的存储过程,在以前版本的SQL服务器中,此过程中没有问题,但在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
set运行Results to grid
,然后将结果从网格复制并粘贴到新查询或任何其他文本编辑器中,我可以复制此行为。
这似乎是以前版本中sp_helptext
行为的变化,因为此效果不会与标准网格结果集一起显示。
最简单的解决方法是运行sp_helptext
与Results to text
设置(Query
- > Results to
> Results to text
,快捷CTRL
+ T
。
您可能需要增加Results to text
中每行的最大字符数以获得预期的输出 - Tools
> Options
> Query Results
> Results to text
- 将“每列中显示的最大字符数”设置为最大值8192。
在我看来,更好的解决方法(与使用结果文本相比)是创建一个sp_helptext2 storedproc,如下所述:
http://sql-javier-villegas.blogspot.com/2012/08/a-workaround-for-sphelptext-bug-in-ssms.html
注意:如果最后没有新行,那么该解决方案会遗漏最后一行的错误。更正了T-SQL:
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
Rufo发布的答案仍然会产生空白行。最后一行代码的一点变化为我解决了这个问题。这是编辑过的代码:
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 ;
--edited here. (where Line<>'')
SELECT Line FROM @ProcLines where Line<>'' ORDER BY PLID
END
尽管这取消了“原始回车”,但这种方式更适合居住。我将数据库从SQL 2008迁移到SQL 2012,并且在使用sp_helptext时,在每行代码之后返回所有存储过程(超过200个),并返回大约5个回车符。
上面的代码帮我解决了。
我写了另一个替代CrLf的解决方法:
DECLARE @results table ([Text] nvarchar(255))
INSERT @results
Exec sp_helptext spStudyRoleCacheFlushNotificationGet
SELECT REPLACE(REPLACE([Text], CHAR(10), ''), CHAR(13), '')
FROM @results
我一直在使用Rufo的解决方案,但我刚刚意识到它在数据库有破折号时会中断。示例:[ST-SALES]
。
对于它的价值,这是基于Rufo解决方案的更新答案。
ALTER 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
我也是为了一个观点而面对这个问题。
以下是我用来解决问题的步骤(请注意只是临时修复)
1)选择查询
2)然后右键单击并在查询设计器中打开
3)单击确定
你会注意到所有额外的空格都被删除了。
注意:这仅适用于简单查询而不适用于程序等
有两种类型的解决方案可用于从sp_helptext输出中删除额外空间
- 转到工具>选项>查询结果>结果到文本(从下拉列表)
- 复制sp_helptext输出在Notepad ++中粘贴。通过按cntl + H打开查找和替换窗口输入以下文本以替换为给定图片中的新文本。 enter image description here
以上是关于SQL Server 2012 SP_HELPTEXT额外行问题的主要内容,如果未能解决你的问题,请参考以下文章
中文版sql server 2012是否只能够安装在中文版的windows server 2012上?
SQL Server 2012 官方版 / SQL Server 2012下载
使用 Visual Studio 2012 和 SQL Server Management Studio 2012 运行 SQL Server CE 4 查询