2013-06-27 2 views
1

Когда я пытаюсь импортировать плоский файл с разделителями-запятыми .csv в 64-разрядный экземпляр Microsoft SQL Server 2008R2, для столбцов строки NULL в исходных данных становится буквальная строка «NULL», а в числовом столбце появляется ошибка импорта. Может кто-нибудь помочь? Заранее спасибо!Мастер импорта SQL Server обрабатывает NULL как литеральную строку «NULL»

ответ

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 
+0

Спасибо! Это решило мою проблему! –

+0

Это ужасное, ужасное решение. «NULL» - вполне допустимая строка, но не то же самое, что и значение null, поэтому не рассматривайте ее как таковую. Такие вещи, как это, являются тем, что приводит к неприятностям для всех бедных людей с «Нулевым» именем. – Voo

+1

@Voo, Вы прочитали вопрос? Null не был действительным значением для OP. – HLGEM

-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, 

Кажется, чтобы сделать работу для меня.