Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 BCP вместо пробела выгружает NULL  [new]
Mairos
Member

Откуда:
Сообщений: 555
Коллеги!
При выгрузке в текстовый файл BCP заменяет NULL-ом не только пустые строки - '' но и пробелы - ' '..
В базе пробелы есть - однозначно!
Вот так выглядит строка на выгрузку

bcp "select 1, 2, CASE WHEN SSUBHOUSENUM1='' THEN NULL ELSE SSUBHOUSENUM1 END ,NISMANUAL from TADDR" queryout "%TempPath%TADDR%Extention%" -c -t"%ColumnSeparator%" -r"%LineSeparator%" -U%UN% -P%UP% -S%SN% -d%DB% -C RAW -q -k /m1000 >> "%ResultPath%%FileName%00.log"

Пробовал убирать '-k' (Указывает, что пустые столбцы во время данной операции должны сохранить значение NULL вместо любых вставляемых значений столбцов по умолчанию.) - никакого толка.
12 дек 12, 12:45    [13618315]     Ответить | Цитировать Сообщить модератору
 Re: BCP вместо пробела выгружает NULL  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Mairos
CASE WHEN SSUBHOUSENUM1='' THEN NULL ELSE SSUBHOUSENUM1 END

При сравнении строк на равенство, хвостовые пробелы не учитываются. Это поведение описано в стандарте ANSI SQL и реализовано в MSSQL. То есть, с точки зрения SQL, пустая строка, один пробел, произвольное количество пробелов — равные друг другу значения.
Как пример:
if '' = ' ' print 'равно' else print 'не равно'

равно
12 дек 12, 13:08    [13618544]     Ответить | Цитировать Сообщить модератору
 Re: BCP вместо пробела выгружает NULL  [new]
Mairos
Member

Откуда:
Сообщений: 555
Гость333, благодарю!
12 дек 12, 13:23    [13618699]     Ответить | Цитировать Сообщить модератору
 Re: BCP вместо пробела выгружает NULL  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Гость333
Mairos
CASE WHEN SSUBHOUSENUM1='' THEN NULL ELSE SSUBHOUSENUM1 END

При сравнении строк на равенство, хвостовые пробелы не учитываются. Это поведение описано в стандарте ANSI SQL и реализовано в MSSQL. То есть, с точки зрения SQL, пустая строка, один пробел, произвольное количество пробелов — равные друг другу значения.
Как пример:
if '' = ' ' print 'равно' else print 'не равно'

равно

А это поведение зависит от настроек сервера? "ANSI_PADDING"
12 дек 12, 14:07    [13619157]     Ответить | Цитировать Сообщить модератору
 Re: BCP вместо пробела выгружает NULL  [new]
Гость333
Member

Откуда:
Сообщений: 3683
trew
А это поведение зависит от настроек сервера? "ANSI_PADDING"

Не зависит. ANSI_PADDING влияет на запись значений в БД.
12 дек 12, 14:18    [13619264]     Ответить | Цитировать Сообщить модератору
 Re: BCP вместо пробела выгружает NULL  [new]
kurai
Member

Откуда:
Сообщений: 127
Mairos,
Напиши LIKE вместо =
12 дек 12, 14:40    [13619452]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить