2009-02-24 2 views
3

ссылается мой последним вопрос о том, извлекая SQL хранимых процедур в .sql файлы (see here) У меня есть еще один вопрос:Как избежать пустой строки sqlcmd между выводами?

как избежать или удалить Sqlcmd пустой строки между результирующим?

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

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

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

Sean

ответ

2

здесь обновление для your пакетного файла (он будет работать> 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 @[email protected]" -o "%%a.sql" 

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

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

но есть и мысль, что крупные процедуры не являются проблемой:

поля

«текста» определяются как NVARCHAR (4000), так что каждая строка может содержать только до 4000 символов. Однако, не редкость иметь объектный код, который намного превышает 4000 символов. Solomon Rutzky - Searching Objects for Text

+0

Здравствуйте, еще раз :) Спасибо за вашу помощь! Я попробую, как только смогу сэкономить время. Я использую эти хранимые процедуры в сочетании с BizTalk Server SQL Adapter - каждый sproc представляет собой набор инструкций для одного приложения BizTalk, исполнение которого выполняется на основе пареметра, представленного BizTalk. Обратите внимание: – seansilver

+0

Несомненно, вы добры. –