Почему bcp выводит значение NULL, если столбец содержит пустую строку и пустую строку, если столбец имеет значение NULL?

StackOverflow https://stackoverflow.com/questions/1644731

  •  10-07-2019
  •  | 
  •  

Вопрос

Это показалось мне очень странным, и я потратил некоторое время на проверку ошибок в своем коде, прежде чем нашел это

" из копий из таблицы базы данных или представления в файл. Если вы укажете существующий файл, файл будет перезаписан. При извлечении данных обратите внимание, что утилита bcp представляет пустую строку как пустую строку и пустую строку как пустую строку. & Quot; (из http://msdn.microsoft.com/en-us/library/ms162802 .aspx )

Очевидно, это позволило мне решить мою проблему, но кто-нибудь может подумать или кто-нибудь знает причину, почему это так?

Это было полезно?

Решение

Прошло некоторое время, но я уверен, что это обратная совместимость / наследие назад к SQL Server 6.5

SQL Server 6.5 не удалось сохранить пустую строку: всегда был один пробел. Это изменилось с SQL 7

Итак, '' - > NULL и '' - > правильно с точки зрения древней истории.

Другие советы

SELECT ARTICULO as Articulo, 
        case when rtrim(CCOLOR) = '' then null else rtrim(CCOLOR) end as Color, 
        case when rtrim(TALLE) = '' then null else rtrim(TALLE) end as Talle,
from precios

Отправьте null вместо пустого.

Я нахожу лучшее решение здесь:

https: // bytes .com / тема / SQL-сервер / ответы / 143738-BCP-вставка наводка-пространства-пустая строка

  

Я нашел обходной путь, используя структуру Case в запросе sql для   изменить пустую строку на ноль. BCP, в свою очередь, выводит   пустой как пустой!   Спасибо за вашу помощь.   Эрик

Это относится к " значениям по умолчанию " раздел для ППГ:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during-bulk -import-SQL-Server

  

Например, если в файле данных есть пустое поле, вместо него загружается значение по умолчанию для столбца.

Вы должны вспомнить дни, когда импортировались простые текстовые файлы из других странных систем. BCP переводит '' как "не определено" (= пропущенные данные) и устанавливает значение NULL в базе данных (= пропущенные данные). Другой способ обойти NULL из базы данных должен быть '' для других систем.

Чтобы вывести «реальные» данные из базы данных, используйте переключатель -k :

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during -bulk-импорт-SQL-сервер # keep_nulls

  

Следующие квалификаторы указывают, что пустое поле в файле данных сохраняет нулевое значение во время операции массового импорта, а не наследует значение по умолчанию (если оно есть) для столбцов таблицы.

Тогда у вас есть ASCII 0x0 в вашем файле / базе данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top