█ 启用/关闭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. GUI图形界面

    一.界面元素 1.首层容器:Jwindow.JFrane(窗体).JDialge(对话框).JApplet. 2.组件:标签.文本框.密码框.按钮.下拉列表.单选框.复选框.文本域等 注:标签JLab ...

  2. wiki1169-传纸条(dp)

    http://wikioi.com/problem/1169/ 四维数组和三维数组: #include<iostream> #include<cstdio> #include& ...

  3. 应用XML作为数据库的快速开发框架

    背景 我经常应用C#开发一些小的桌面程序,这些桌面程序往往有以下几个特点: 程序比较小,开发周期很短. 程序的数据量不大,多数情况下不超过1万行记录. 对程序的性能要求不高. 程序并发很少或者基本没有 ...

  4. Struts2常量的具体用法实例(一)

    XML代码: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC ...

  5. SQL Server活动监视器

    打开SQL Server活动监视器:

  6. IPv6 sokcet 编程

    IPv6的数据包包头与IPv4的数据包头不一样,所以在IPv6下的socket编程用到的某些结构体和地址转换函数也与IPv4下的socket编程不一样.涉及的结构体有:IPv4中使用sockaddr/ ...

  7. 日志管理 rsyslog服务浅析

    http://www.xiaomastack.com/2014/11/13/rsyslog/

  8. 隐藏gvim中的工具栏和菜单栏

    在vim的配置文件.vimrc中添加如下代码: "Toggle Menu and Toolbar set guioptions-=m set guioptions-=T map <si ...

  9. 进程间通信之XSI IPC

    XSI IPC源自于系统V的IPC功能. 有三种IPC我们称作XSI IPC,即消息队列.信号量以及共享存储器,它们之间有很多相似之处. 1.标识符和键 每个内核中的IPC结构(消息队列.信号量或共享 ...

  10. 用PC浏览器模拟手机浏览器(一):无扩展版

    想浏览手机版,打开对应网址却跳转到PC版?怎么办? 下面咱们来说下在只是安装了浏览器,无需其他安装操作的情况下来怎么用PC浏览器模拟手机浏览器,然后访问手机站点. 浏览器众多,IE系列的咱就不考虑了, ...