Почему bcp выводит значение NULL, если столбец содержит пустую строку и пустую строку, если столбец имеет значение NULL?
-
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
вместо пустого.
Я нахожу лучшее решение здесь:
Я нашел обходной путь, используя структуру Case в запросе sql для изменить пустую строку на ноль. BCP, в свою очередь, выводит пустой как пустой! Спасибо за вашу помощь. Эрик
Это относится к " значениям по умолчанию " раздел для ППГ:
Например, если в файле данных есть пустое поле, вместо него загружается значение по умолчанию для столбца.
Вы должны вспомнить дни, когда импортировались простые текстовые файлы из других странных систем. BCP переводит ''
как "не определено" (= пропущенные данные) и устанавливает значение NULL в базе данных (= пропущенные данные). Другой способ обойти NULL из базы данных должен быть ''
для других систем.
Чтобы вывести «реальные» данные из базы данных, используйте переключатель -k
:
Следующие квалификаторы указывают, что пустое поле в файле данных сохраняет нулевое значение во время операции массового импорта, а не наследует значение по умолчанию (если оно есть) для столбцов таблицы.
Тогда у вас есть ASCII 0x0 в вашем файле / базе данных.