как избежать пустой строки sqlcmd между наборами результатов?

ссылаясь на мой последний вопрос об извлечении хранимых процедур SQL в файлы .sql (см. Здесь) У меня другой вопрос:

как избежать или удалить пустую строку sqlcmd между наборами результатов?

Причина (см. MSDN) Когда возвращается несколько результатов, sqlcmd печатает пустая строка между каждым набором результатов в пакете.

Это означает, что хранимые процедуры (более 4000 символов) разделены на две части каждая, в syscomments, и при экспорте с sqlcmd в текстовый файл (.sql) в этой точке разделения будет новая строка. Как его убрать или избежать?

Заранее спасибо!

Шон


person seansilver    schedule 24.02.2009    source источник


Ответы (1)


вот обновление для вашего командный файл (он будет работать для ограничения> 8000 символов, но это ограничение легко настроить):

for /f %%a in (sp_list.txt) do sqlcmd -E -S SERVER -d DB -h-1 -Q "DECLARE @I INT, @SP1 NVARCHAR(4000), @SP2 NVARCHAR(4000) SET @I = 0 SET @SP1 = '' SET @SP2 = '' SELECT @I = @I + 1, @SP1 = CASE WHEN @I = 1 THEN text ELSE @SP1 END, @SP2 = CASE WHEN @I = 2 THEN text ELSE @SP2 END from dbo.syscomments WHERE id = OBJECT_ID('%%a') SELECT @SP1+@SP2" -o "%%a.sql"

лично меня беспокоят столь большие процедуры.

это ограничение, но если у вас есть хранимые процедуры с номерами строк длиной более 4000 символов, у вас, вероятно, есть гораздо более серьезные проблемы, чем можно решить, читая этот блог ... ни одна из моих хранимых процедур не имеет строк длиной более 150 символов, так что, вероятно, для большинства людей это не имеет большого значения. Как я уже сказал, если ваши строки такие длинные, у вас большие проблемы!
Адам Мачаник -" Отразить "подпрограмму TSQL

но есть также мысли, что большие процедуры не проблема:

Поле «текст» определяется как NVARCHAR (4000), поэтому каждая строка может содержать не более 4000 символов. Однако нередки случаи, когда объектный код намного превышает 4000 символов. Соломон Руцки - Поиск объектов для текста

person Maksym Gontar    schedule 25.02.2009
comment
И снова здравствуйте :) Спасибо за вашу помощь! Я попробую, как только появится свободное время. Я использую эти хранимые процедуры в сочетании с адаптером SQL BizTalk Server - каждый sproc представляет собой набор операторов для одного приложения BizTalk, выполнение которого зависит от параметра, отправленного BizTalk. внимание - person seansilver; 27.02.2009