我正在尝试导入具有数字和字母数字值的列(从.csv文件),但是当我运行该openrowset过程时,它会正确导入数字行,但对于字母数字值,默认为null。
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,一点都没有改变。
IMEX =1
问题原因是Oledb提供程序
导入具有混合数据类型列的csv文件或excel文件时,它将用替换非主要类型null。( 使用Oledb或Ace.Oledb )
解决方法
您可以通过添加包含字符串值的第一行,然后在完成提示后将其删除来进行一些变通
ID,A,B,C 0,a,a,a 1,12,hh,i 2,ab12,tt,b 3,2,aa,o 4,bc12,ee,l
如果使用,它将解决此问题 IMEX=1
IMEX=1
这会将列读取为字符串,将ID列读取为数字。(使用0)
或将HDR=NO属性添加到连接字符串,以便标头是导入的第一行(其所有值都是字符串)
HDR=NO
在本文中阅读有关混合数据类型的更多信息
其他方法
或者尝试在没有aceoledb提供程序的情况下实现此目的,而只是以其他方式导入csv文件,如下所示:
使用Microsoft文本驱动程序
SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir=C:\;', 'SELECT * FROM abc.csv')
使用批量插入
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' )
这些文章中的其他详细信息: