我正在使用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 server配置如下(从关于的Help ->复制)
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
提前谢谢。
发布于 2012-06-16 18:06:47
如果我在设置了Results to grid
的情况下运行sp_helptext
,然后将网格中的结果复制并粘贴到新的查询或任何其他文本编辑器中,则可以复制此行为。
这似乎是sp_helptext
与以前版本相比的行为变化,因为这种效果不会在标准网格结果集中显示。
最简单的解决方法是使用快捷键设置运行sp_helptext
(Query
-> Results to
> Results to text
,快捷方式CTRL
+ T
)。
您可能需要增加Results to text
中每行的最大字符数,以获得预期的输出- Tools
> Options
> Query Results
> Results to text
-将“每列中显示的最大字符数”设置为最大值8192。
发布于 2012-11-01 22:55:29
在我看来,一个更好的解决方法(与将结果转换为文本相比)是创建一个sp_helptext2 storedproc,如下所述:
http://sql-javier-villegas.blogspot.com/2012/08/a-workaround-for-sphelptext-bug-in-ssms.html
注意:该解决方案有一个bug,如果末尾没有新行,则会省略最后一行。更正的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
发布于 2013-09-15 15:56:55
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
尽管这删除了“原始回车”,但这是更好的生活方式。我用DB从SQL2008迁移到SQL2012,在使用sp_helptext时,所有的存储过程(超过200个)在每一行代码后都返回了大约5个回车符。
上面的代码帮助我解决了这个问题。
https://stackoverflow.com/questions/11061642
复制相似问题