SQL-сервер 2012 выпуск дополнительных строк SP_HELPTEXT

18

Я использую SQL-сервер 2012, & amp; всегда используйте 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-сервера выглядит следующим образом (скопировано из Справка - & gt; О )

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

Thanx заранее.

    
задан yogi 16.06.2012 в 09:31
источник
  • Не вижу такого поведения здесь (SQL Server Express 2012). –  David Brabant 16.06.2012 в 09:42
  • Я уже упомянул о конфигурации моей версии, PLZ также посмотрите на нее –  yogi 16.06.2012 в 09:53
  • Возможно, вы это знаете, но вы можете щелкнуть правой кнопкой мыши хранимую процедуру, а Modify предоставит вам источник. Бесплатный SQL-поиск RedGate позволяет быстро выбрать хранимую процедуру. –  Andomar 16.06.2012 в 11:26

6 ответов

19

Я могу воспроизвести это поведение, если я запустил sp_helptext с Results to grid , а затем скопировал и вставил результаты из сетки в новый запрос или любой другой текстовый редактор.

Кажется, это изменение в поведении sp_helptext из предыдущих выпусков, так как этот эффект не отображается со стандартными наборами результатов сетки.

Простейшим решением будет запуск sp_helptext с Results to text set ( Query - & gt; Results to & gt; Results to text , shortcut CTRL + T .

Вам может потребоваться увеличить максимальное количество символов в строке в Results to text , чтобы получить ожидаемый результат - Tools & gt; Options & gt; Query Results & gt; Results to text - установить максимальное количество символов, отображаемых в каждом столбце, до максимального значения 8192.

    
ответ дан Ed Harper 16.06.2012 в 12:06
источник
  • Да, результат для текста работает отлично, спасибо! –  yogi 16.06.2012 в 12:13
5

Лучшее обходное решение (по сравнению с использованием результатов для текста), на мой взгляд, заключается в создании sp_helptext2 storedproc, как описано здесь:

Ссылка

Примечание: это решение имеет ошибку, оставив последнюю строку, если в конце нет новой строки. Исправлен 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
    
ответ дан rufo 01.11.2012 в 15:55
источник
  • Извините @rufo .. Ваш ответ не работает –  Rama 20.07.2016 в 03:27
  • @ Dram: извините - это сработало для меня годами. Я недавно прекратил использовать, потому что это не обязательно, если у вас SSMS 2014. –  rufo 20.07.2016 в 16:01
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('''[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

Даже при том, что это удаляет «оригинальные возвращения каретки», но с этим лучше жить. Я перенесла DB с SQL 2008 на SQL 2012, и все хранимые процедуры (более 200) были возвращены с примерно 5 возвратами каретки после каждой строки кода при использовании sp_helptext.

Приведенный выше код помог мне решить проблему.

    
ответ дан Ish Goel 15.09.2013 в 09:56
источник
  • Спасибо @Ish Goel за код. Это помогло мне –  Ram 27.08.2014 в 08:10
0

Я написал другое обходное решение, которое просто заменяет CrLf:

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

INSERT @results
Exec sp_helptext spStudyRoleCacheFlushNotificationGet

SELECT REPLACE(REPLACE([Text], CHAR(10), ''), CHAR(13), '')
FROM @results
    
ответ дан gerrard00 19.08.2013 в 23:31
источник
0

Я тоже столкнулся с этой проблемой для просмотра.

Ниже приведены шаги, которые я использовал для решения проблемы (обратите внимание только на временное исправление)

1) выберите запрос

2), затем щелкните правой кнопкой мыши и откройте в конструкторе запросов

3) нажмите ok

вы заметите, что все лишние пробелы удалены.

Примечание: это работает только для простых запросов, а не для процедур и т. д.

    
ответ дан Ram 17.06.2014 в 07:23
источник
-1

Существует два типа решения, которые вы можете использовать для удаления дополнительного пространства из вывода sp_helptext

  1. Перейти к Инструменты & gt; Опция & gt; Результаты запроса & gt; Результат к тексту (из выпадающего списка)
  2. Копирование вывода sp_helptext Вставить в блокнот ++. открыть окно поиска и замены, нажав cntl + H, введите следующий текст, чтобы заменить его новым текстом, как на данном снимке. введите описание изображения здесь
ответ дан Raj Kumar 05.06.2018 в 15:23
источник
  • Это больше похоже на метод постпроцесса вывода, а не на изменение формата вывода. –  Toby Speight 05.06.2018 в 15:50