将CSV文件内容导入SQL SERVER语句该怎样写

luxuehong 2005-09-12 10:28:48
需要将很多CSV格式的文件内容导入SQL SERVER中,其中CSV文件中的列数跟数据库表中的字段数都是对应一样的,使用这种写法为什么总是报错
INSERT INTO table1 SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Extended Properties=text;HDR=Yes;FMT=Delimited','Data Source=e:\test\book2.csv')

服务器: 消息 208,级别 16,状态 1,行 1
对象名 'table1' 无效。
服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 报错。
[OLE/DB provider returned message: 找不到可安装的 ISAM。]

请教大家正确的写法应该是怎样写的
...全文
1175 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
foryour 2006-05-22
  • 打赏
  • 举报
回复
学习
lehua713 2006-03-24
  • 打赏
  • 举报
回复
顶一下:

select node_name, up_node_name, node_ip
from OpenDataSource('MICROSOFT.JET.OLEDB.4.0','Text;HDR=Yes;DATABASE=D:\North\')...[info050722#csv]

这个可以用!!

stephen_xl 2005-09-19
  • 打赏
  • 举报
回复
OPENDATASOURCE是不接受参数变量,所以写参数变量是会报错的

/********************************************************************************
Transact-SQL 参考


OPENDATASOURCE
不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。

语法
OPENDATASOURCE ( provider_name, init_string )

参数
provider_name

注册为用于访问数据源的 OLE DB 提供程序的 PROGID 的名称。provider_name 的数据类型为 char,没有默认值。

init_string

连接字符串,这些字符串将要传递给目标提供程序的 IDataInitialize 接口。提供程序字符串语法是以关键字值对为基础的,这些关键字值对由分号隔开,例如:"keyword1=value; keyword2=value."

在 Microsoft® Data Access SDK 中定义了基本语法。有关所支持的特定关键字值对的信息,请参见提供程序中的文档。下表列出 init_string 参数中最常用的关键字。

关键字 OLE DB 属性 有效值和描述
数据源 DBPROP_INIT_DATASOURCE 要连接的数据源的名称。不同的提供程序用不同的方法对此进行解释。对于 SQL Server OLE DB 提供程序来说,这会指明服务器的名称。对于 Jet OLE DB 提供程序来说,这会指明 .mdb 文件或 .xls 文件的完整路径。
位置 DBPROP_INIT_LOCATION 要连接的数据库的位置。
扩展属性 DBPROP_INIT_PROVIDERSTRING 提供程序特定的连接字符串。
连接超时 DBPROP_INIT_TIMEOUT 超时值,在该超时值后,连接尝试将失败。
用户 ID DBPROP_AUTH_USERID 用于该连接的用户 ID。
密码 DBPROP_AUTH_PASSWORD 用于该连接的密码。
目录 DBPROP_INIT_CATALOG 连接到数据源时的初始或默认的目录名称。


注释
OPENDATASOURCE 函数可以在能够使用链接服务器名的相同 Transact-SQL 语法位置中使用。因此,就可以将 OPENDATASOURCE 用作四部分名称的第一部分,该名称指的是 SELECT、INSERT、UPDATE 或 DELETE 语句中的表或视图的名称;或者指的是 EXECUTE 语句中的远程存储过程。当执行远程存储过程时,OPENDATASOURCE 应该指的是另一个 SQL Server。OPENDATASOURCE 不接受参数变量。

与 OPENROWSET 函数类似,OPENDATASOURCE 应该只引用那些不经常访问的 OLE DB 数据源。对于访问次数稍多的任何数据源,请为它们定义链接的服务器。无论 OPENDATASOURCE 还是 OPENROWSET 都不能提供链接的服务器定义的全部功能,例如,安全管理以及查询目录信息的能力。每次调用 OPENDATASOURCE 时,都必须提供所有的连接信息(包括密码)。

示例
下面的示例访问来自某个表的数据,该表在 SQL Server 的另一个实例中。

SELECT *
FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ServerName;User ID=MyUID;Password=MyPass'
).Northwind.dbo.Categories

下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions


请参见

分布式查询

OPENROWSET

sp_addlinkedserver

©1988-2000 Microsoft Corporation。保留所有权利。
***********************************************************/
cywarson 2005-09-14
  • 打赏
  • 举报
回复
关注.
luxuehong 2005-09-14
  • 打赏
  • 举报
回复
再问一下 wukele(猪) ,当)[info050722#csv]是个变量时该怎样写呢,我这样写的['+@FileName+'#csv]报错
wukele 2005-09-13
  • 打赏
  • 举报
回复
insert into t(node_name, up_node_name, node_ip)
select node_name, up_node_name, node_ip
from OpenDataSource('MICROSOFT.JET.OLEDB.4.0','Text;HDR=Yes;DATABASE=D:\North\')...[info050722#csv]
xzq111 2005-09-13
  • 打赏
  • 举报
回复
在Dos下用bcp命令:
bcp table1 in "e:\test\book2.csv" -c -t, -Sservername -Uusername -Ppassword
在T-Sql中
DECLARE @cmd sysname
@cmd ='bcp table1 in "e:\test\book2.csv" -c -t, -Sservername -Uusername -Ppassword'
exec master..xp_cmdshell @cmd
luxuehong 2005-09-13
  • 打赏
  • 举报
回复
这个问题应该很多人会吧,怎么没人给解答一下呢?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧