通过 Openrowset 和 Microsoft.ACE.OLEDB.12.0 从 csv 导入(到不同的列)
Posted
技术标签:
【中文标题】通过 Openrowset 和 Microsoft.ACE.OLEDB.12.0 从 csv 导入(到不同的列)【英文标题】:Import from csv (into different columns) via Openrowset and Microsoft.ACE.OLEDB.12.0 【发布时间】:2010-09-07 19:03:32 【问题描述】:我想澄清如何将 .csv 中的数据导入到具有 3 列的表中(请参阅下面的 CR Ranking.csv)。我的查询:
select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=C:\Work\;HDR=Yes;',
'SELECT * FROM [CR Ranking.csv]');
将结果输出到一个列:
header: Category;INfo;Rank
row 1: Category 1;Info;1
row 2: Category 2;INfo2;2
row 3: Category 3;INfo3;3
是否可以通过 Openrowset 将 .csv 中的数据拆分为 3 列? 我认为我错过了 Openrowset 参数中的一些内容,也许这很容易?
是的:我正在使用 Office 2010 中的 64 位 ODBC 驱动程序来获取 .csv、.txt 等的驱动程序... 这就是为什么提供者是:'Microsoft.ACE.OLEDB.12.0',这就是为什么这个连接字符串似乎不起作用:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\';Extended Properties="text; HDR=NO; FMT=Delimited";
CR Ranking.csv:
Category;INfo;Rank
Category 1;Info;1
Category 2;INfo2;2
Category 3;Info3;3
UPD 1: 没有格式文件可以做吗?
UPD 2:我通过格式文件制作 - 很简单。打扰了。
【问题讨论】:
一直在尝试将简单的 Jet csv 连接字符串转换为 ACE 驱动程序。这是我在浏览了大约 75 个不同的网页后看到的第一个从 64 位 ACE 访问 csv 文件的工作示例。谢谢!显然我的主要缺陷是在 Database 属性周围使用双引号(如果引用则不起作用) 使用列定义创建一个 schema.ini 文件。这是一个链接msdn.microsoft.com/en-us/library/ms974559.aspx 【参考方案1】:我知道这是一篇旧帖子,但我还是想回复一下。
我没有尝试过使用 ACE,但我发现有几篇帖子说类似以下内容会起作用。注意自定义 Delimited(;) 设置...
select top 50 * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=c:\temp\captell;HDR=Yes;FORMAT=Delimited(;)', 'SELECT * FROM [DASDGIGS0013046591395.TXT]')
【讨论】:
确认这适用于 Excel 2010 x64 和 SQL Server Express 2008 R2。 SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Text;HDR=YES;FMT=Delimited;Database=C:\Data\;"', 'SELECT * FROM [table.csv]')跨度>FORMAT=Delimited(;)
无法从分号分隔的文件中读取,尽管这将从逗号分隔的文件中读取
晚安 我一直在努力解决这个问题!我的问题通过 [filename.txt] 中的“[”括号解决了 - 我收到了许多用于链接服务器类型错误的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”。 +1,谢谢!以上是关于通过 Openrowset 和 Microsoft.ACE.OLEDB.12.0 从 csv 导入(到不同的列)的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 使用 OPENROWSET 导出到 Excel