在使用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 这两个函数调用外部数据时,就可能因为设置的原因,出现上面的故障提示