Как обойти ограничение длины столбца без пустых пространств? - PullRequest
8 голосов
/ 07 мая 2011

Я пытаюсь использовать sqlcmd на компьютере под управлением Windows Server 2005 для записи запроса в файл csv.Обычно мы используем следующие параметры командной строки:

-l 60 -t 300 -r 1 -b -W -h -1

Однако столбцы усечены до 256 байтов.В попытке обойти это, я попытался использовать этот параметр командной строки вместо -W:

-y 8000

Это захватывает все поля, но проблема с этим методом заключается в том, что файл всплывает от чуть болееОт 1 до 200 МБ из-за всего дополнительного пространства (я понимаю, что 8000, вероятно, излишне, но, вероятно, должно быть не менее 4000, и в настоящее время я работаю только с небольшим подмножеством данных).Опция -W обычно устраняет все это дополнительное пространство, но когда я пытаюсь использовать их вместе, он говорит мне, что они взаимоисключающие.

Есть ли способ получить sqlcmd вокруг этого предела, или кто-нибудь знает, еслидругая программа (например, bcp или osql) облегчит эту задачу?


Редактировать: Вот фрагменты кода, которые мы используем для получения поляэто усекается (аналогичный код используется для нескольких полей):

SELECT ALIASES.AliasList as complianceAliases,    

...

LEFT OUTER JOIN (Select M1.ID, M1.LIST_ID,stuff((SELECT '{|}' + isnull(Content2,'')+' '+isnull(Content3,'')+' '+isnull(Content4,'')+' '+isnull(Content5,'')+' '+isnull(Content6,'')+' '+isnull(Content7,'')
                                  FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M2 with (nolock)
                                  WHERE M1.LIST_ID = M2.LIST_ID and M1.ID = M2.ID and M1.TYPE = M2.TYPE                                      
                                  FOR XML PATH('')
                                  ),1,1,'') as AliasList
             FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M1 with (nolock)
             WHERE M1.LIST_ID = 2001 AND M1.TYPE = 'Aliases'
             GROUP BY m1.list_id,m1.ID,m1.Type) as ALIASES
             ON ALIASES.LIST_ID = PAIR.COMP_LIST_ID AND ALIASES.ID = PAIR.COMP_ID

1 Ответ

17 голосов
/ 31 мая 2011

Я решил эту проблему с помощью аргумента "-y0".Он по-прежнему оставлял кучу пробелов, но похоже, что он доходил только до конца самого длинного фрагмента данных в каждом поле.

Затем я провел вывод через программу, которая удалила повторяющиеся пробелы и решилапроблемы.

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