SQL Server导入向导将NULL视为文字字符串'NULL'

时间:2013-06-27 18:55:50

标签: sql-server csv import null flat-file

当我尝试将.csv逗号分隔的平面文件导入Microsoft SQL Server 2008R2 64位实例时,对于字符串列,原始数据中的NULL变为文字字符串“NULL”,并且在我收到的数字列中导入错误。谁能请帮忙???提前谢谢!

3 个答案:

答案 0 :(得分:5)

KISS

预处理它,全部替换" NULL"用""。

即.csv文件将具有

,,

而不是

NULL,NULL,

似乎为我做了这份工作。

答案 1 :(得分:-1)

将数据放入临时表,然后使用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

答案 2 :(得分:-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],这也会失败,并告诉您类型转换错误......