我正在尝试使用数字和字母数字值导入列(来自.csv文件),但是当我运行openrowset过程时,它会正确导入数字行,但对于字母数字值,它默认为null.
表A.
ID,A,B,C 1,12,hh,i 2,ab12,tt,b 3,2,aa,o 4,bc12,ee,l
使用的代码
SELECT * FROM OPENROWSET ( 'Microsoft.ACE.OLEDB.12.0','Text;Database=C:\;IMEX=1;','SELECT * FROM abc.csv' ) t
我使用IMEX = 1并且根本没有变化.
解决方法
问题的原因是Oledb提供商
导入具有混合数据类型列的csv文件或excel文件时,它将使用null替换非显性类型. (使用Oledb或Ace.Oledb)
你可以通过添加包含字符串值的第一行然后在impirting完成后删除它来做一些解决方法
ID,C 0,a,a 1,l
如果使用IMEX = 1,它将解决问题
这将读取列作为字符串和ID列作为数字. (使用0)
或者将HDR = NO属性添加到连接字符串,以便标题是导入的第一行(其所有值都是字符串)
阅读此article中有关混合数据类型的更多信息
其他方法
或者尝试在没有aceoledb提供程序的情况下实现此目的,只需以其他方式导入csv文件,如下所示:
使用Microsoft文本驱动程序
SELECT * FROM OPENROWSET('MSDAsql','Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir=C:\;','SELECT * FROM abc.csv')
使用BULK INSERT
CREATE TABLE dbo.MyTable (ID INTEGER,A VARCHAR(50),B VARCHAR(50),C VARCHAR(50) ) BULK INSERT dbo.MyTable FROM 'C:\abc.csv' WITH ( FIELDTERMINATOR = ',',ROWTERMINATOR = '\n' )
这些文章中的其他细节:
> How to import csv file with OPENROWSET?
> T-SQL – Read CSV files using OpenRowSet(详细教程)