Когда я пытаюсь импортировать плоский файл с разделителями-запятыми .csv в 64-разрядный экземпляр Microsoft SQL Server 2008R2, для столбцов строки NULL в исходных данных становится буквальная строка «NULL», а в числовом столбце появляется ошибка импорта. Может кто-нибудь помочь? Заранее спасибо!Мастер импорта SQL Server обрабатывает NULL как литеральную строку «NULL»
1
A
ответ
0
Поместите данные в промежуточную таблицу, а затем вставьте в производственную таблицу с использованием кода 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
-1
Внесение в ответ 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]
определяется с желаемыми типами столбцов, это также терпит неудачу, и говорит вам в ошибки преобразования типов ...
5
ПОЦЕЛУЙ
Предварительно обработать его, заменить все «NULL» с «».
то есть .csv файл будет иметь
,,
Вместо
NULL,NULL,
Кажется, чтобы сделать работу для меня.
Спасибо! Это решило мою проблему! –
Это ужасное, ужасное решение. «NULL» - вполне допустимая строка, но не то же самое, что и значение null, поэтому не рассматривайте ее как таковую. Такие вещи, как это, являются тем, что приводит к неприятностям для всех бедных людей с «Нулевым» именем. – Voo
@Voo, Вы прочитали вопрос? Null не был действительным значением для OP. – HLGEM