sqlserver 存储过程跨库查询

实践环境:SQL SERVER 2008R2

一般跨库查询: select  * from [远程IP].库名.dbo.表名/存储过程

正常存储过程如果在数据库管理器的链接服务器地址中添加了远程IP,是没问题的,但是如果创建作业定时执行任务就报如下错误:

已以用户 NT AUTHORITYNETWORK SERVICE 的身份执行。 链接服务器 "远程IP" 的 OLE DB 访问接口 "SQLNCLI10" 报错。身份验证失败。 [SQLSTATE 42000] (错误 7399)  无法初始化链接服务器 "远程IP" 的 OLE DB 访问接口 "SQLNCLI10" 的数据源对象。 [SQLSTATE 42000] (错误 7303)  链接服务器"远程IP"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "无效的授权说明"。 [SQLSTATE 01000] (错误 7412).  该步骤失败。

针对此报错可以使用下面跨库查询方法:

select  * from OPENDATASOURCE('SQLOLEDB','Data Source=远程IP;User ID=sa;Password=sasa').库名.dbo.表名/存储过程

注意:

有的服务器因为安全问题可能会关闭一些组件,会报如下错误:

已以用户 NT AUTHORITYNETWORK SERVICE 的身份执行。 SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。 [SQLSTATE 42000] (错误 15281).  该步骤失败。

针对此报错开启Ad Hoc Distributed Queries组件即可,执行如下sql:

exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

关闭Ad Hoc Distributed Queries组件的sql如下:

exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure

原文地址:https://www.cnblogs.com/Zbuxu/p/11865113.html