日期:2014-05-17  浏览次数:20453 次

csv数据导入数据库
我想把csv里面的数据导入到数据库中,所使用的语句如下,各种错误啊。请问还有什么方式吗?
SQL code

INSERT INTO NewTable
SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)}; 
DEFAULTDIR=E:\2012-09-07\;
Extensions=CSV;','SELECT * FROM ExportData.csv')


所出现的问题大概有下面的,有时候是对的有时候又是错的,不知道为什么。

错误1:
链接服务器"(null)"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[Microsoft][ODBC 文本 驱动程序] 超出系统资源。"。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "MSDASQL" 的数据源对象。

错误2:
消息 233,级别 20,状态 0,第 0 行
在向服务器发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。)

错误3:
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "MSDASQL" 报错。提供程序未给出有关错误的任何信息。
消息 7330,级别 16,状态 2,第 1 行
无法从链接服务器 "(null)" 的 OLE DB 访问接口"MSDASQL"提取行。

错误4:
其中有一字段有的值为数字,有的是汉字,所以我在建表时用了nvarchar(60),但是查询出来的数据只显示数字的,所有汉字的那些都为null了。



问题2
还有就是,我要写个程序,读取本地的csv,导入的是远程服务器,请问怎么实现,谢谢大家了。

------解决方案--------------------
用 Bulk Insert 应该可以。
------解决方案--------------------
改成下面试试
SQL code

SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)}; 
DBQ=E:\2012-09-07','SELECT * FROM ExportData.csv')

------解决方案--------------------
SQL code
sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries',1
GO
RECONFIGURE
GO