Экспорт BCP автоматически преобразует пустые строки в NUL

Все, в этом сообщении длина запроса xp_cmdshell слишком велика, мне удалось получить исправление для проблемы, с которой я столкнулся с размером запроса ограничение с помощью xp_cmdshell. Причина, по которой я написал такой длинный запрос, заключалась в попытке обойти другую проблему: тот факт, что bcp, по-видимому, преобразует пустые строки (из таблицы, содержащей поля с пустыми строками) в некоторый закодированный символ («NUL» или «r», или что-то). Это влияет на то, для чего я могу использовать свои экспортированные данные. У меня есть экспортный запрос

string strBcp = String.Format(
    "declare @sql varchar(8000) " +
    "select @sql = 'bcp \"SELECT * FROM [{0}]..[ivwTmpDrgDataView];\" ' +" +
    "'queryout \"{1}\\DRGData.txt\" -c -t -T -S ' + @@servername " +
    "exec master..xp_cmdshell @sql;",
    strDatabase,
    strDataDir);

Это отлично работает, но в экспортированном файле значения базы данных преобразуются

NULL -> Empty String (Which is fine!)
Empty String -> Some strange character

Я мог бы прочитать файл .txt с помощью C#, а затем перекодировать - как лучше всего преобразовать мой "странный символ" обратно в то, чем он должен быть, в пустую строку?

Спасибо за ваше время.


person MoonKnight    schedule 12.06.2012    source источник


Ответы (2)


Это задумано, если bcp преобразует как нулевые, так и пустые строки в один и тот же результат (скажем, в пустую строку), тогда не будет возможности устранить неоднозначность позже.

person paul    schedule 12.06.2012
comment
Итак, как лучше всего преобразовать мой странный символ в пустую строку. То есть заставить bcp записывать пустую строку как пустую строку? - person MoonKnight; 12.06.2012
comment
используя coalesce или IsNull в выходном запросе? - person paul; 12.06.2012

BCP преобразует NULL в пустую строку, поэтому используйте NULL вместо пустой строки.

Дополнительное описание

утилита bcp

person Shahab J    schedule 29.07.2016