求把Excel表导入MS-SQL SEVER 2005的Sql语句

时间:2022-12-05 09:25:10
公司隔一两天就要从外单位取回报表(用Excel做的),然后要我导入到数据库中。但我经常不在公司,工作就被拖下来了,我和公司都不胜其烦。
我想写一个页面给公司的内勤,让她可以把excel表上传到服务器,然后就可以导入到数据库了。上传的部分我已经做好了,但怎样写一个语句,可以把Excel表导入呢?
我在网上找了一下,也有一些语句的,但都不成功。例如下面这句查询的代码(我想先用查询的代码来测试):

SELECT * FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0',
 'Data Source="E:\abc\通讯录.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[网友$]

执行之后就报一个错误:
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。 

请问这是什么意思呢?怎样才能解决?和UserID和Password有没有关系?
谢谢。

11 个解决方案

#1


打开外围配置应用程序,把这个'OpenRowset/OpenDatasource'  启用

#2


引用 1 楼 js_szy 的回复:
打开外围配置应用程序,把这个'OpenRowset/OpenDatasource' 启用

up

#3


我找到“外围配置应用程序”,并启用了那个“OpenRowset/OpenDatasource”,但执行之后提示下面的错误:
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。身份验证失败。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。

#4



配置工具->sql server外围应用配置器->服务和连接的外围应用配置器->打开MSSQLSERVER节点下的Database Engine 节点,先择"远程连接",接下建议选择"同时使用TCP/IP和named pipes",确定后,重启数据库服务就可以。


试试

#5


前来学习学习!

#6




--1 解决方法(2) 外围应用配置器修改亦可.

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO

--2 相关说明

By default, SQL Server does not allow ad hoc distributed queries using OPENROWSET and OPENDATASOURCE. When this option is set to 1, SQL Server allows ad hoc access. When this option is not set or is set to 0, SQL Server does not allow ad hoc access.

Ad hoc distributed queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server.

--3 楼主可先 拷贝 关键字ad hoc distributed queries到google查询

--4 ... ... 


#7


--打开高级参数设置
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
--开启'Ad Hoc Distributed Queries'
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO
--关闭高级参数设置
EXEC sp_configure 'show advanced options', 0
RECONFIGURE
GO

#8


啊,,,,好痛苦。按照4楼的做了,不行,报下面的错:
消息 7399,级别 16,状态 1,第 2 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。提供程序未给出有关错误的任何信息。
消息 7303,级别 16,状态 1,第 2 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。


然后,把代码拷贝到另一台装Sql-Server 2000的电脑上运行,一下运行成功,就出结果了。
这使我非常难以困惑:因为我正想买一台新的服务器,当然想在新服务器上安装最新的软件,但现在,原来已经写好的代码,很多都是在Sql Server2000下写的,运行很正常。但在装Sql Server 2005的电脑上运行的时候,不知道什么时候就报错了。
现在又出现这种情况,怎么办呢?

#9


学习不少!

#10


EXEC master..xp_cmdshell 'bcp TempDB.dbo.T In E:\abc\通讯录.xls -c -q -S "InstanceName" -U "sa" -P "" ' 

用这个看看

#11


奇怪了,运行成功了。昨天安照4楼的回帖做了之后,重新启动了sql server,但出现8楼的错误提示。但刚才运行的成功了,应该是重新启动计算机就可以了。
这次可以了,只怕下次不知道又出现什么问题了。

#1


打开外围配置应用程序,把这个'OpenRowset/OpenDatasource'  启用

#2


引用 1 楼 js_szy 的回复:
打开外围配置应用程序,把这个'OpenRowset/OpenDatasource' 启用

up

#3


我找到“外围配置应用程序”,并启用了那个“OpenRowset/OpenDatasource”,但执行之后提示下面的错误:
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。"。
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。身份验证失败。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。

#4



配置工具->sql server外围应用配置器->服务和连接的外围应用配置器->打开MSSQLSERVER节点下的Database Engine 节点,先择"远程连接",接下建议选择"同时使用TCP/IP和named pipes",确定后,重启数据库服务就可以。


试试

#5


前来学习学习!

#6




--1 解决方法(2) 外围应用配置器修改亦可.

EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO

--2 相关说明

By default, SQL Server does not allow ad hoc distributed queries using OPENROWSET and OPENDATASOURCE. When this option is set to 1, SQL Server allows ad hoc access. When this option is not set or is set to 0, SQL Server does not allow ad hoc access.

Ad hoc distributed queries use the OPENROWSET and OPENDATASOURCE functions to connect to remote data sources that use OLE DB. OPENROWSET and OPENDATASOURCE should be used only to reference OLE DB data sources that are accessed infrequently. For any data sources that will be accessed more than several times, define a linked server.

--3 楼主可先 拷贝 关键字ad hoc distributed queries到google查询

--4 ... ... 


#7


--打开高级参数设置
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
--开启'Ad Hoc Distributed Queries'
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO
--关闭高级参数设置
EXEC sp_configure 'show advanced options', 0
RECONFIGURE
GO

#8


啊,,,,好痛苦。按照4楼的做了,不行,报下面的错:
消息 7399,级别 16,状态 1,第 2 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。提供程序未给出有关错误的任何信息。
消息 7303,级别 16,状态 1,第 2 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。


然后,把代码拷贝到另一台装Sql-Server 2000的电脑上运行,一下运行成功,就出结果了。
这使我非常难以困惑:因为我正想买一台新的服务器,当然想在新服务器上安装最新的软件,但现在,原来已经写好的代码,很多都是在Sql Server2000下写的,运行很正常。但在装Sql Server 2005的电脑上运行的时候,不知道什么时候就报错了。
现在又出现这种情况,怎么办呢?

#9


学习不少!

#10


EXEC master..xp_cmdshell 'bcp TempDB.dbo.T In E:\abc\通讯录.xls -c -q -S "InstanceName" -U "sa" -P "" ' 

用这个看看

#11


奇怪了,运行成功了。昨天安照4楼的回帖做了之后,重新启动了sql server,但出现8楼的错误提示。但刚才运行的成功了,应该是重新启动计算机就可以了。
这次可以了,只怕下次不知道又出现什么问题了。