当前位置:  开发笔记 > 数据库 > 正文

使用Openrowset导入错误

如何解决《使用Openrowset导入错误》经验,为你挑选了1个好方法。

我正在尝试使用数字和字母数字值导入列(来自.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,根本没有变化.



1> Hadi..:

问题的原因是Oledb提供商

导入具有混合数据类型列的csv文件或excel文件时,它将替换非主导类型null.(使用Oledb或Ace.Oledb)

解决方法

你可以通过添加包含字符串值的第一行然后在impirting完成后删除它来做一些解决方法

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

这将读取列作为字符串和ID列作为数字.(使用0)

或者将HDR=NO属性添加到连接字符串,以便标题是导入的第一行(其所有值都是字符串)

阅读本文中有关混合数据类型的更多信息

其他方法

或者尝试在没有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' 
  )

这些文章中的其他细节:

如何用OPENROWSET导入csv文件?

T-SQL - 使用OpenRowSet读取CSV文件 (详细教程)


@zack为什么要投票?阅读有关oledb混合数据类型的更多信息,您将看到只有很少的方法可以使用.
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有