как избежать sqlcmd пустой строки между Resultsets? - PullRequest
4 голосов
/ 24 февраля 2009

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

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

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

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

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

Sean

1 Ответ

2 голосов
/ 25 февраля 2009

вот обновление для вашего пакетного файла (оно будет работать для ограничения> 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 символов. Соломон Руцкий - Поиск объектов по тексту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...