yog*_*ogi 19 sql sql-server ide formatting
我正在使用SQL Server 2012,并始终使用SP_HELPTEXT
以获取我以前创建的存储过程,在以前版本的SQL服务器中,此过程中没有问题,但在2012年,我的存储过程带有额外的行,例如,这是我写
Create proc SP_Test
as
begin
Select *
from table_ABC
end
Run Code Online (Sandbox Code Playgroud)
现在使用SP_HELPTEXT
此过程(或任何其他过程)后,我得到此输出
Create proc SP_Test
as
begin
Select *
from table_ABC
end
Run Code Online (Sandbox Code Playgroud)
还有其他人也面临这个问题,或者我是这个星球上唯一一个与这个问题斗争的人?有没有人知道如何解决这个问题?
我的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
Run Code Online (Sandbox Code Playgroud)
Thanx提前.
Ed *_*per 22
如果我sp_helptext
使用Results to grid
set 运行,我可以复制此行为,然后将结果从网格复制并粘贴到新查询或任何其他文本编辑器中.
这似乎是sp_helptext
以前版本行为的变化,因为此效果不会与标准网格结果集一起显示.
最简单的解决方法是sp_helptext
使用Results to text
set 运行(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
Run Code Online (Sandbox Code Playgroud)
小智 5
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
Run Code Online (Sandbox Code Playgroud)
虽然这消除了"原始回车",但这种方式更适合居住.我将数据库从SQL 2008迁移到SQL 2012,并且在使用sp_helptext时,在每行代码之后返回所有存储过程(超过200个),并返回大约5个回车符.
上面的代码帮我解决了.
归档时间: |
|
查看次数: |
25491 次 |
最近记录: |