加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 使用Openrowset导入错误

发布时间:2020-12-12 06:19:30 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试使用数字和字母数字值导入列(来自.csv文件),但是当我运行openrowset过程时,它会正确导入数字行,但对于字母数字值,它默认为null. 表A. ID,A,B,C1,12,hh,i2,ab12,tt,b3,2,aa,o4,bc12,ee,l 使用的代码 SELECT * FROM OPENROWSET ( 'Microsoft.ACE.OLED
我正在尝试使用数字和字母数字值导入列(来自.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(详细教程)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读