Когда я пытаюсь импортировать плоский файл с разделителями-запятыми .csv в Microsoft SQL server 2008R2 64-bit instance, для string столбцов NULL в исходных данных становится буквальной строкой "NULL", а в столбце numeric я получаю сообщение об ошибке импорта. Кто-нибудь может помочь???
Мастер импорта SQL Server обрабатывает NULL как литеральную строку «NULL»
Ответы (3)
Поместите данные в промежуточную таблицу, а затем вставьте в рабочую таблицу с помощью кода SQL.
update table1
set field1 = NULL
where field1 = 'null'
Или если вы хотите сделать много полей
update table1
set field1 = case when field1 = 'null' then Null else Field1 End
, field2 = case when field2 = 'null' then Null else Field2 End
, field3 = case when field3 = 'null' then Null else Field3 End
person
HLGEM
schedule
27.06.2013
Это ужасное, ужасное решение. NULL — это совершенно допустимая строка, а не нуль, поэтому не рассматривайте ее как таковую. Именно такие вещи и приводят к проблемам всех бедняков с Нулевой фамилией.
- person Voo; 22.08.2016
@Voo, ты вопрос читал? Null не является допустимым значением для OP.
- person HLGEM; 22.08.2016
@HLGEM OP также говорит о строковых столбцах и нигде ничего не говорит о том, является ли NULL допустимым или нет - просто NULL вызовет ошибку в целочисленных столбцах.
- person Voo; 22.08.2016
Ха, какой некротред. Я зашел, чтобы проверить свой старый вопрос и увидел это. @Voo, хотя вы правы в том, что это вызвало бы проблемы, если бы NULL был допустимым вводом, в моем случае это было не так, и отбрасывание этих значений было правильным.
- person Erik Johnson; 03.11.2020
ЦЕЛОВАТЬ
Предварительно обработайте его, замените все «NULL» на «».
т.е. файл .csv будет иметь
,,
Вместо
NULL,NULL,
Кажется, делает работу за меня.
person
Max Robbertze
schedule
06.07.2015
Добавляя к ответу HLGEM, я делаю это динамически, я загружаю в промежуточную таблицу, здесь все типы столбцов VARCHAR, а затем делаю:
DECLARE @sql VARCHAR(MAX) = '';
SELECT @sql = CONCAT(@sql, '
UPDATE [staging].[',[TABLE_NAME],']
SET [',[COLUMN_NAME],'] = NULL
WHERE [',[COLUMN_NAME],'] = ''NULL'';
')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE [TABLE_SCHEMA] = 'staging'
AND [TABLE_NAME] IN ('MyTableName');
SELECT @sql;
EXEC(@sql);
Затем выполните:
INSERT INTO [dbo].[MyTableName] ([col1], [col2], [colN])
SELECT [col1], [col2], [colN]
FROM [staging].[MyTableName]
Если таблица [dbo].[MyTableName] определена с желаемыми типами столбцов, это также терпит неудачу и сообщает вам об ошибках преобразования типов...
person
Morad
schedule
22.09.2014