sqlserver 存储过程跨库查询
实践环境:SQL SERVER 2008R2
一般跨库查询: select * from [远程IP].库名.dbo.表名/存储过程
正常存储过程如果在数据库管理器的链接服务器地址中添加了远程IP,是没问题的,但是如果创建作业定时执行任务就报如下错误:
已以用户 NT AUTHORITY\NETWORK 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 AUTHORITY\NETWORK 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