2012-06-16 20 views
17

Estoy usando SQL Server 2012, & siempre uso SP_HELPTEXT para obtener mis procedimientos almacenados previamente creados. En versiones anteriores de SQL Server no hubo problemas en este proceso, pero en 2012, My Stored Procedures viene con líneas adicionales, por ejemplo, este es el procedimiento que escribíSQL server 2012 SP_HELPTEXT número de líneas adicionales

Create proc SP_Test 
as 
begin 
Select * 
from table_ABC 
end 

Ahora después de usar SP_HELPTEXT con este procedimiento (o cualquier otro procedimiento), estoy consiguiendo esta salida

Create proc SP_Test 

as 

begin 

Select * 

from table_ABC 

end 

¿Alguien más también enfrenta este problema o yo soy el único en este planeta para luchar con este problema? ¿Algún cuerpo sabe cómo resolver este problema?

configuración de mi servidor SQL es el siguiente (copiado de Ayuda -> Acerca de)

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 

Gracias de antemano.

+0

no vemos que el comportamiento aquí (SQL Server Express 2012). –

+0

He mencionado la configuración de mi versión ahora, por favor échele un vistazo también – yogi

+0

Probablemente sepa esto, pero puede hacer clic derecho en un procedimiento almacenado y 'Modificar' le dará la fuente. La [Búsqueda SQL] gratuita de RedGate (http://www.red-gate.com/products/sql-development/sql-search/) lo ayuda a seleccionar rápidamente un procedimiento almacenado. – Andomar

Respuesta

17

Puedo replicar este comportamiento si ejecuto sp_helptext con Results to grid conjunto, luego copie y pegue los resultados de la cuadrícula en una nueva consulta o cualquier otro editor de texto.

Esto parece ser un cambio en el comportamiento de sp_helptext de ediciones anteriores, ya que este efecto no se muestra con los conjuntos de resultados de grillas estándar.

El más simple solución alternativa será la de ejecutar sp_helptext con Results to text conjunto (Query -.>Results to>Results to text, acceso directo CTRL + T

Es posible que necesite aumentar el número máximo de caracteres por línea en Results to text para obtener la salida esperas - Tools>Options>Query Results>Results to text - set "número máximo de caracteres que se muestran en cada columna" al valor máximo de 8192.

+2

Sí, el texto está funcionando bien, gracias :) – yogi

5

Una mejor WOR karound (comparada con su uso Resultados al texto) en mi opinión es crear un storedproc sp_helptext2 como se explica aquí:

http://sql-javier-villegas.blogspot.com/2012/08/a-workaround-for-sphelptext-bug-in-ssms.html

Nota: esta solución tiene un error dejando fuera la última línea si no hay una nueva línea en el fin. corregido 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('''[email protected]+''')' 

    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 
+0

Lo siento @rufo ... Tu respuesta no funciona – Rama

+0

@Dram: lo siento, funcionó durante años. Recientemente dejé de usar porque no es necesario si tienes SSMS 2014. – rufo

0

me escribió otra solución que simplemente se cambia de CrLf:

DECLARE @results table ([Text] nvarchar(255)) 

INSERT @results 
Exec sp_helptext spStudyRoleCacheFlushNotificationGet 

SELECT REPLACE(REPLACE([Text], CHAR(10), ''), CHAR(13), '') 
FROM @results 
5

La respuesta Publicado por Rufo aún produce líneas en blanco. Un pequeño cambio en la última línea de código resolvió el problema para mí. Aquí está el código editado:

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('''[email protected]+''')' 

    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 

Aunque esto elimina los retornos de carro "originales", pero esto es mucho mejor que vivir. Migré por DB desde SQL 2008 a SQL 2012 y todos los procedimientos almacenados (más de 200) se devolvieron con alrededor de 5 retornos de carro después de cada línea de código cuando se usa sp_helptext.

El código anterior me ayudó a resolverlo.

+0

Gracias @Ish Goel por el código. Me ayudó – Ram

0

Yo también enfrenté este problema para obtener una vista.

A continuación se presentan los pasos que utilicé para resolver el problema (tenga en cuenta sólo una solución temporal)

1) seleccione la consulta

2) haga clic derecho y abierta en el diseñador de consultas

3) Haga clic ok

notará que se han eliminado todos los espacios adicionales.

Nota: esto sólo funciona para consultas sencillas, no para los procedimientos, etc

Cuestiones relacionadas