【发布时间】:2013-06-25 10:10:13
【问题描述】:
当我尝试将.csv 逗号分隔的平面文件导入Microsoft SQL server 2008R2 64-bit instance 时,对于string 列,原始数据中的NULL 变为文字字符串"NULL" 和numeric 列我收到导入错误。有人可以帮忙吗???
【问题讨论】:
标签: sql-server csv import null flat-file
当我尝试将.csv 逗号分隔的平面文件导入Microsoft SQL server 2008R2 64-bit instance 时,对于string 列,原始数据中的NULL 变为文字字符串"NULL" 和numeric 列我收到导入错误。有人可以帮忙吗???
【问题讨论】:
标签: sql-server csv import null flat-file
亲吻
对其进行预处理,将所有“NULL”替换为“”。
即 .csv 文件将具有
,,
代替
NULL,NULL,
似乎为我做这项工作。
【讨论】:
将数据放入暂存表,然后使用 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
【讨论】:
添加到 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] 定义了所需的列类型,这也会失败并告诉您类型转换错误...
【讨论】: