█ 启用/关闭Ad Hoc Distributed Queries
Ad Hoc Distributed Queries服务默认是关闭的,要使用openrowset 和 openquery访问远程数据库,需要在本地启用该服务

-- 启用    Ad Hoc Distributed Queries
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure -- 关闭 Ad Hoc Distributed Queries
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure

█openrowset 和 openquery访问远程数据库

1、openquery

【首先需要创建服务器连接】
方法1. SQLServerManagementStudio→服务器对象→连接服务器,右键(新建连接服务器),录入服务器名,
          选择服务器类型:SQLServer或其他数据源
            (Oracle:Microsoft OLE DB Provide for Oracle)
            (SQL Server:Microsoft OLE DB Provide for SQL Server)
            (Sybace等:Microsoft OLE DB Provide for ODBC Drivers)
          安全性→使用此安全上下文建立连接:远程数据库用户名及密码
          服务器选项:如果要访问远程数据库中的存储过程,RPC/RPC OUT:ture

方法2. 通过执行以下命令行实现:
          创建后在SQLServerManagementStudio→服务器对象→连接服务器看到新创建的连接服务器,RPC/RPC OUT需要手动修改

--创建链接服务器
exec sp_addlinkedserver '连接服务器名称', '', 'SQLOLEDB', '服务器IP地址'
exec sp_addlinkedsrvlogin '连接服务器名称', 'false',null, '用户名', '密码' --删除链接服务器
exec sp_dropserver '连接服务器名称', 'droplogins'

【查询】

-- 无参数查询(IPSERVER为连接服务器名称)
select * from openquery(IPSERVER,'select * from TB.dbo.employee') -- 有参数查询(IPSERVER为连接服务器名称)
declare @v_sql varchar(4000)
declare @v_employeeID varchar(5)
select @v_employeeID = ''
set @v_sql = 'select * from openquery(IPSERVER,''select * from TB.dbo.employee where employeeID = ''''' + @v_employeeID + ''''''') as a'
exec (@v_sql)

【调用存储过程及函数】

declare @v_btime datetime
declare @v_etime datetime
declare @v_sql varchar(4000)
select @v_btime = '2013.07.01'
select @v_etime = '2013.07.02' -- 有参数调用函数(IPSERVER为连接服务器名称)
SET @v_sql = 'select * from openquery(IPSERVER, ''select * from TB.dbo.func_OrderDetail('''''+convert(varchar(19),@v_btime,120)+''''','''''+convert(varchar(19),@v_etime,120)+''''')'')'
exec (@v_sql) -- 有参数调用存储过程(IPSERVER为连接服务器名称)
SET @v_sql = 'select * from openquery(IPSERVER, ''exec TB.dbo.proc_OrderDetail '''''+convert(varchar(19),@v_btime,120)+''''','''''+convert(varchar(19),@v_etime,120)+''''''')'
exec (@v_sql)

2、openrowset

【查询】

-- 无参数查询(远程SQLServer服务器)
select * from openrowset('MSDASQL', 'DRIVER={SQL Server};SERVER=服务器IP地址;UID=用户名;PWD=密码;Initial Catalog=Pubs', 'select * from TB.dbo.employee') as a select * from openrowset('SQLOLEDB', 'DRIVER={SQL Server};SERVER=服务器IP地址;UID=用户名;PWD=密码;Initial Catalog=Pubs', 'select * from TB.dbo.employee') as a select * from openrowset('SQLOLEDB', 'SERVER=服务器IP地址;UID=用户名;PWD=密码;Initial Catalog=Pubs', 'select * from TB.dbo.employee') as a -- 有参数查询(远程SQLServer服务器)
declare @v_sql varchar(4000)
declare @v_employeeID varchar(5)
select @v_employeeID = ''
set @v_sql = 'select * from openrowset(''MSDASQL'', ''DRIVER={SQL Server};SERVER=服务器IP地址;UID=用户名;PWD=密码;Initial Catalog=Pubs'', ''select * from TB.dbo.employee where employeeID = ''''' + @v_employeeID + ''''''') as a'
exec (@v_sql) declare @v_sql varchar(4000)
declare @v_employeeID varchar(5)
select @v_employeeID = ''
set @v_sql = 'select * from openrowset(''SQLOLEDB'', ''DRIVER={SQL Server};SERVER=服务器IP地址;UID=用户名;PWD=密码;Initial Catalog=Pubs'', ''select * from TB.dbo.employee where employeeID = ''''' + @v_employeeID + ''''''') as a'
exec (@v_sql) declare @v_sql varchar(4000)
declare @v_employeeID varchar(5)
select @v_employeeID = ''
set @v_sql = 'select * from openrowset(''SQLOLEDB'', ''SERVER=服务器IP地址;UID=用户名;PWD=密码;Initial Catalog=Pubs'', ''select * from TB.dbo.employee where employeeID = ''''' + @v_employeeID + ''''''') as a'
exec (@v_sql) -- 无参数查询(远程Oracle服务器)
select * from openrowset('MSDAORA','实例名';'用户名';'密码','select * from TB.employee') as a -- 有参数查询(远程Oracle服务器)
declare @v_sql varchar(4000)
declare @v_employeeID varchar(5)
select @v_employeeID = ''
set @v_sql = 'select * from openrowset(''MSDAORA'', ''实例名'';''用户名'';''密码'', ''select * from TB.employee where employeeId = ''''' + @v_employeeID + ''''''') as a'
exec (@v_sql)

【调用存储过程和函数】

declare @v_btime datetime
declare @v_etime datetime
declare @v_sql varchar(4000)
select @v_btime = '2013.07.01'
select @v_etime = '2013.07.02' -- 调用函数
set @v_sql = 'select * from openrowset(''MSDASQL'', ''DRIVER={SQL Server};SERVER=服务器IP地址;UID=用户名;PWD=密码;Initial Catalog=Pubs'', ''select * from TB.dbo.func_OrderDetail('''''+convert(varchar(19),@v_btime,120)+''''','''''+convert(varchar(19),@v_etime,120)+''''')'') as a'
exec (@v_sql) -- 调用存储过程
set @v_sql = 'select * from openrowset(''MSDASQL'', ''DRIVER={SQL Server};SERVER=服务器IP地址;UID=用户名;PWD=密码;Initial Catalog=Pubs'', ''exec TB.dbo.proc_OrderDetail '''''+convert(varchar(19),@v_btime,120)+''''','''''+convert(varchar(19),@v_etime,120)+''''''') as a'
exec (@v_sql)

【SQLServer】使用T-SQL访问远程数据库:openrowset 和 openquery 以及连接服务器的创建的更多相关文章

  1. SQL SERVER 导入、导出数据到Exce(使用OpenRowset,、OpenDataSource函数)以及访问远程数据库(openrowset/opendatasource/openquery)

    启用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries服务,因为这个服务不安 ...

  2. 在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)

    1.启用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries服务,因为这个服务 ...

  3. 在SqlServer查询分析器里 访问远程数据库 进行数据查询更新等操作(openrowset)

    启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1 reconfigure exec sp_config ...

  4. 不用配置tnsnames.ora,直接通过PL/SQL访问远程数据库

  5. SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery)

    SQLServer跨服务器访问数据库(openrowset/opendatasource/openquery) 1.启用Ad Hoc Distributed Queries 在使用openrowset ...

  6. MSSqlServer访问远程数据库

    --第一部分(要点)--永久访问方式(需对访问远程数据库进行经常性操作)时设置链接数据库Exec sp_addlinkedserver 'MyLinkServer','','SQLOLEDB','远程 ...

  7. SQL Server远程数据库操作(备份、还原等)

    · SQL Server远程数据库备份到本地: exp sauser/sapassword@192.168.8.233:1433/DBName file=d:/backup.dmp OWNER=sum ...

  8. DB2 编目并访问远程数据库

    之后将逐步对项目上的DB2相关经验做个总结,梳理一下知识结构. 要远程操作数据库,首先要进行编目,分三个步骤: 1. 在客户端建立服务器端数据库的节点,编目远程节点. 格式如下: 1. CATALOG ...

  9. mORMot访问远程数据库

    mORMot访问远程数据库 mORMot中提供了TOleDBJetConnectionProperties类来处理Access的mdb数据库的访问,自带线程池.通过TSQLDBServerHttpAp ...

随机推荐

  1. C# 生成解决方案失败,点击项目重新生成报找不到命名空间

    1.点击生成解决方案失败,点击项目“重新生成”找不到“XXX”命名空间. 尝试点击"重新生成解决方案"多次,然后点击项目的"重新生成"即可解决.

  2. VirtualBox虚拟磁盘扩容

    1. cmd中运行 VBoxManage modifyhd D:\我的资料库\Documents\VirtualBox VMs\ubuntu\ubuntu.vdi --resize 提示错误  Syn ...

  3. MYCAT介绍

    为什么需要MyCat? http://www.mycat.org.cn/ http://www.csdn.net/article/2015-07-16/2825228

  4. 让sublime text 3默认新建GBK文件

    想让sublime text支持显示或者保存中文,需要安装插件convertToUTF8,具体安装可以问度娘. 安装插件以后,想让保存的html文件支持中文,可以通过ctrl+shift+C来完成.但 ...

  5. Java:浅谈InputStream的close方法

    原则:最好在任何时候使用InputStream或者OutputStream的时候,在finally中调用close()方法,显式关闭. 一个典型的示例 InputStream in = null; t ...

  6. Python requests模块

    import requests 下面就可以使用神奇的requests模块了! 1.向网页发送数据 >>> payload = {'key1': 'value1', 'key2': [ ...

  7. HttpRequest

    #ifndef __HTTP_REQUEST_H__ #define __HTTP_REQUEST_H__ #include "cocos2d.h" #include " ...

  8. 将Java程序作成exe文件的几种方法【转载】

    看到网上有同志的介绍将Java程序作成exe文件的方法,写的不错,但是也许是这篇文章完成的时间比较早,许多内容已经不合适了.我在这里补充几条: 一.exe4j 说明:exe4j可以将Jar文件制作成e ...

  9. TOJ 4325 RMQ with Shifts / 线段树单点更新

    RMQ with Shifts 时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 描述 In the traditional RMQ (Range M ...

  10. [ES6] 16. Object Enhancements

    Define object: var color = "blue"; var speed = 120; var car = {color, speed}; console.log( ...