Вставьте пустую строку на SQL Server с помощью BULK INSERT

Пример таблицы содержит поля Id (идентификатор таблицы, целое число); Name (простой атрибут, который допускает нулевые значения, это строка)

Я пытаюсь сделать CSV, который содержит это:

  

1

     

1 ""

     

1, ''

Ни один из них не дает мне пустую строку в результате массовой вставки. Я использую SQL Server 2012.

Что я могу сделать?

4 голоса | спросил mishamosher 23 MaramSat, 23 Mar 2013 04:14:42 +04002013-03-23T04:14:42+04:0004 2013, 04:14:42

1 ответ


0

Помните, что указанное значение DEFAULT будет вставлено, только если вы не используете опцию KEEPNULLS. Используя тот же пример, что и выше, если вы добавите параметр KEEPNULLS в BULK INSERT, то есть:

BULK INSERT BulkInsertTest
FROM '....\test.csv'
WITH 
(
    FIELDTERMINATOR ='\,',
    ROWTERMINATOR ='\n',
    KEEPNULLS
)

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

SELECT * FROM BulkInsertTest

теперь даст вам:

id  name
1   NULL
1   ""
1   ''

Похоже, нет веской причины для добавления KEEPNULLS в вашем примере, но я столкнулся с подобной проблемой только сейчас где KEEPNULLS требовалось в BULK INSERT .

Мое решение состояло в том, чтобы определить, что нужно сделать столбец [name] в промежуточной таблице BulkInsertTest NOT NULL, но помните, что значение столбца DEFAULT игнорируется и вместо него вставляется пустая строка.

Подробнее см. здесь: Сохранять значения Null или UseDefault во время массового импорта (SQL Server)

ответил akosteletos 3 Jpm1000000pmFri, 03 Jan 2014 14:55:49 +040014 2014, 14:55:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132