在使用sql Server对外部数据进行查询时,可能会出现的问题:
如在Sql Server中查询一Access数据库
select * From OpenRowSet('microsoft.jet.oledb.4.0',';database=c:/Nwind.mdb','select * from MSysObjects')
在执行语句时,提示错误信息:
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
解决的办法:
1.启用Ad Hoc Distributed Queries
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
2.关闭Ad Hoc Distributed Queries
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',1
reconfigure
那么Ad Hoc Distributed在Sql Server中到底是指什么?
在SQL2005的联机帮助中,可以看到这样的解释:
即席分布式查询选项
即席分布式查询使用 OPENROWSET 和 OPENDATASOURCE 函数连接到使用 OLE DB 的远程数据源。OPENROWSET 和 OPENDATASOURCE 只应在引用不常访问的 OLE DB 数据源时使用。对于经常访问的任何数据源,应定义链接服务器。
如果为此选项设置了非零值,SQL Server 将不允许通过 OPENROWSET 和 OPENDATASOURCE 函数即席访问 OLE DB 访问接口。如果未设置此选项,SQL Server 也不允许即席访问。
也就是说当我们使用OPENROWSET 和 OPENDATASOURCE 这两个函数调用外部数据时,就可能因为设置的原因,出现上面的故障提示