Как заставить Microsoft BCP экспортировать пустую строку вместо символа NUL?

Я работал, пытаясь заставить этот инструмент bcp работать определенным образом. Переключатель -c должен экспортировать с использованием символов, но по какой-то причине в Notepad ++ отображался странный символ, например, если это был UNICODE или какое-то другое форматирование.

Я хотел, чтобы этот char, который был пустой строкой в ​​базе данных, экспортировался как пустая строка в текстовый файл. Как ты это делаешь?


person mimoralea    schedule 25.09.2012    source источник


Ответы (2)


Что ж, порывшись в сети, вот что я нашел. Думал поместить его в SO, чтобы больше людей имело к нему доступ.

http://www.techtalkz.com/microsoft-sql-server/147106-how-export-empty-strings-via-bcp.html

Но когда я запускаю bcp, пустые строки записываются в текстовый файл с использованием символа ASCII «NUL» (0x0). Вместо этого я хочу, чтобы поле заполнялось пробелами (0x20).

Решение:

В текстовом файле пустая строка интерпретируется как NULL при массовом вводе данных. Символ NUL интерпретируется как пустая строка, поэтому существует согласованность. Но это мало помогает, если вы экспортируете данные в другую систему....

Просто оберните NULLIF то поле, которое, возможно, пусто в базе данных, и заставьте его поймать '' и заменить на NULL. Это будет преобразовано в ^^ значения ^ ^ ^ больше значений ^ ^ и больше ^^, поэтому вы получите двойной разделитель с пробелом вместо символа NUL.

E.g.:

...
NULLIF(pri.InstanceName, '') as PerformanceInstanceName,
...

Надеюсь, это поможет кому-то.

person mimoralea    schedule 25.09.2012
comment
для этого есть переключатель stackoverflow.com/a/46441273/1498669 - person Bernhard; 27.09.2017
comment
@Bernhard Какой это переключатель? Для экспорта - person gbn; 26.10.2017

Просто продолжение...

Приведенное выше решение NULLIF отлично работает в Microsoft SQL, но для более стандартизированного решения, которое работает практически в любой базе данных, вы должны попробовать COALESCE.

Синтаксис очень похож:

COALESCE(pri.InstanceName, '') as PerformanceInstanceName
person D3Young    schedule 06.02.2015
comment
На самом деле COALESCE — это противоположность того, что нужно в данном случае. Нам нужно идентифицировать нули и заменить на ''' - person Ralph Trickey; 15.03.2016
comment
я так и думал, но когда я изменил coalesce на nullif, нулевой вывод был заменен пустой строкой - person Jeff; 02.11.2017