2012-06-16 17 views
17

Używam serwera SQL 2012, & zawsze używam SP_HELPTEXT, aby uzyskać moje wcześniej utworzone Procedury przechowywane, W poprzednich wersjach serwera SQL nie było żadnych problemów w tym procesie, ale w 2012 roku, Moje procedury przechowywane pochodzą z dodatkowymi liniami, na przykład jest to procedura, która napisałemSQL Server 2012 SP_HELPTEXT dodatkowe wydanie linii

Create proc SP_Test 
as 
begin 
Select * 
from table_ABC 
end 

teraz po użyciu SP_HELPTEXT z tej procedury (lub innej procedury), jestem coraz to wyjście

Create proc SP_Test 

as 

begin 

Select * 

from table_ABC 

end 

Czy ktoś inny również boryka się z tym problemem, czy jestem jedynym na tej planecie, który zmaga się z tym problemem? Czy każdy organ wie, jak rozwiązać ten problem?

Konfiguracja mojego serwera SQL jest następujący (skopiowane z Pomoc -> O)

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 

Niż z góry.

+0

Nie widać tego zachowania (SQL Server Express 2012). –

+0

Wspomniałem już o konfiguracji mojej wersji, plz też na nią patrzę – yogi

+0

Prawdopodobnie wiesz o tym, ale możesz kliknąć prawym przyciskiem myszy procedurę przechowywaną, a 'Modify' poda ci źródło. RedGate za darmo [Wyszukiwanie SQL] (http://www.red-gate.com/products/sql-development/sql-search/) pomaga szybko wybrać procedurę przechowywaną. – Andomar

Odpowiedz

17

Mogę replikować to zachowanie, jeśli uruchomię sp_helptext z zestawem Results to grid, a następnie skopiuj i wklej wyniki z siatki do nowego zapytania lub dowolnego innego edytora tekstu.

Wydaje się, że zmiana zachowań sp_helptext z poprzednich edycji, ponieważ ten efekt nie jest wyświetlany ze standardowymi zestawami wyników siatki.

Najprostszym obejście będzie prowadzony sp_helptext z Results to text zestawu (Query -.>Results to>Results to text, skrótów CTRL + T

Być może trzeba zwiększyć maksymalną liczbę znaków w wierszu w Results to text dostać wyjście można oczekiwać - Tools>Options>Query Results>Results to text - zestaw „maksymalna liczba znaków wyświetlanych w każdej kolumnie” do maksymalnej wartości 8192.

+2

Tak, wynik dla tekstu działa poprawnie, thanx :) – yogi

5

lepszym wor karound (w porównaniu do korzystania wyniki do tekstu) moim zdaniem jest stworzenie storedproc sp_helptext2 jak wyjaśniono tutaj:

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

Uwaga: To rozwiązanie ma błąd opuszczając ostatnią linię, jeśli nie ma nowych linii na koniec. Poprawione 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

Przepraszamy @rufo .. Twoja odpowiedź nie działa – Rama

+0

@Dram: przepraszam - to działało dla mnie od lat. Właśnie przestałem używać, ponieważ nie jest to konieczne, jeśli masz SSMS 2014. – rufo

0

pisałem kolejny obejście, które po prostu zastępuje crlf:

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

INSERT @results 
Exec sp_helptext spStudyRoleCacheFlushNotificationGet 

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

Odpowiedź wysłana przez Rufo nadal produkuje wierszy. Mała zmiana w ostatniej linijce kodu rozwiązała problem. Oto edytowany kod:

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 

Mimo to usuwa „oryginalne powrotu karetki”, ale jest to o wiele lepiej żyć. Migrowałem przez DB z SQL 2008 do SQL 2012 i wszystkie procedury składowane (ponad 200) zostały zwrócone z około 5 powrotami karetki po każdym wierszu kodu przy użyciu sp_helptext.

Powyższy kod pomógł mi go rozwiązać.

+0

Dzięki @Ish Goel dla kodu. Pomogło mi to – Ram

0

Ja również stanąłem w obliczu tego problemu, aby uzyskać widok.

Poniżej przedstawiamy kroki użyłem, aby rozwiązać problem (uwaga tylko tymczasowy fix)

1) Wybierz zapytanie

2) Następnie kliknij prawym i otwarty w projektancie zapytań

3) Kliknij ok

zauważysz, że wszystkie dodatkowe spacje zostały usunięte.

Uwaga: działa to tylko w przypadku prostych zapytań nie dotyczących procedur itp.

Powiązane problemy