本文转自:http://blog.csdn.net/nnaabbcc/article/details/7967761

存储过程调用不同数据库的数据

在存储过程调用不同数据库的数据该如何做,比如在存储过程名为AAA的存储过程里面调用数据库为hudu1,hudu2,hudu3里面的数据来统计?
在同一台数据库服务器上:
select * from hudu1.dbo.表名
select * from hudu2.dbo.表名
select * from hudu3.dbo.表名 在不同数据库服务器上:
select * from openrowset('SQLOLEDB','sql服务器1';'用户名';'密码',hudu1.dbo.表名)
select * from openrowset('SQLOLEDB','sql服务器2';'用户名';'密码',hudu2.dbo.表名)
select * from openrowset('SQLOLEDB','sql服务器3';'用户名';'密码',hudu3.dbo.表名) 下面的方法可以参考:
方法一:用OPENDATASOURCE 方法去操作异地数据库 declare @i int
set @i=1
select * from OPENDATASOURCE('SQLOLEDB','Data Source=IP地址;User ID=sa;Password=密码').异地数据库名.dbo.表名 A inner join 本地数据库名..表名 B
on A.关联字段=B.关联字段 and A.字段名称 --方法二:如果经常访问或数据量大,建议用链接服务器 --创建链接服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go --查询示例
select * from srv_lnk.数据库名.dbo.表名 --导入示例
select * into 表 from srv_lnk.数据库名.dbo.表名 go
--以后不再使用时删除链接服务器
exec sp_dropserver 'srv_lnk','droplogins' --如果只是临时访问,可以直接用openrowset
--查询示例
select * from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名) --导入示例
select * into 表 from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名) 错误7405:异类查询要求为连接设置ANSI-NULL和ANSI-WARNNINGS选项,这将确保一致的查询语意,请启用这些选项,然后重新发出查询
解决方法:
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
CREATE PROCEDURE .... SQL SERVER存储过程中通过链接服务器访问远程服务器SQL实战 SQLSERVER的开发中,经常会碰到跨物理服务器跨数据库的访问和操作。
下面来分析下在存储过程中创建远程访问的完整例子.
需求: 在A服务器上有Card数据库,Card数据库有存储过程proc_Card;
在B服务器上有AccountDB数据库,AccountDB下有Up_account存储过程。
现在需要在执行proc_Card最后,调用一次Up_account存储过程,以实现不同服,不同数据库的数据同步.
分析: 1. 存储过程中调用存储过程不是问题,
Execute '存储过程名字'
存储过程参数1=参数1的值,
参数2=参数2的值
......
2. 如何在A服上创建对B服务器 SQLSERVER的访问呢?
首先不得不提的是SQLSERVER链接服务器,在sql 2K中 企业管理器===>安全性===>链接服务器.
SQLSERVER2005 or 2008中 Maragement studio 服务器对象==>链接服务器。
这个链接服务器对象是如何来的?
默认情况下会只有本机一个,链接服务器名就是本机机器名,通过系统存储过程Execute sp_helpserver 可以查看,显示为name字段 如何新增链接服务器 ?
A. 通过向导,
1. 右键链接服务器--->新增链接服务器
2. 输入链接服务器名[ 需要访问的服务器的机器名或是IP,如果别名无法解析到,则使用IP ] ,指定服务器类型为SQL SERVER,
3. 在安全性中选择'使用此安全上下文建立连接' 指定需要访问的服务器的SQL 登录账号和密码
4。点确定,刷新链接服务器,则可视配置的链接服务器信息
B. 通过系统存储过程,
建立链接sql server服务器,通常有两种情况:
1. 第一种情况,产品选”sql server”
EXEC sp_addlinkedserver
@server='linkServerName',
@srvproduct = N'SQL Server'
这种情况,@server (linkServerName)就是要链接的sqlserver服务器名或者ip地址。
2.第二种情况,访问接口选“Microsoft OLE DB Provider Sql Server”或“Sql Native Client”
EXEC sp_addlinkedserver
@server=' linkServerName ',
@srvproduct='',
@provider='SQLNCLI',
@datasrc='sqlServerName'
这种情况,@datasrc(sqlServerName)就是要链接的实际sqlserver服务器名或者ip地址。
3.Sql server数据库引擎是通过上面设置的服务器名或者ip地址访问链接服务器,DTC服务也是通过服务器名或者ip地址访问链接服务器,所以要保证数据库引擎和DTC都能通过服务器名或者ip地址访问到链接服务器。
建立了链接,创建了数据库的登录访问:
EXEC sp_addlinkedsrvlogin
'上面创建的链接服务器的别名或是IP', --被访问的服务器别名
'false',
NULL,
'账号', --帐号
'登录密码' --密码 接下来就可以通过链接服务器来访问服务器B的AccountDB库下up_account存储过程了:
Execute [链接服务器别名].库名.dbo.存储过程 工作似乎已经结束了,但此时发现,执行存A服存储过程时会报 '未将[所用到的别名] 服务器配置为可用的RPC' ,如何解决?
很简单,查看链接服务器的选项,将RPC RPC_Out 值由False 改为 TRUE 再调试,成功!
也有情况在这里无法更改,解决方案是:
exec sp_configure 'show advanced options', 1; --默认是0
GO
RECONFIGURE WITH OVERRIDE;
GO
存储过程调用不同数据库的数据_SQL SERVER存储过程中通过链接服务器访问远程服务器SQL实战_SQLSERVER跨平台数据访问

[转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器的更多相关文章

  1. Oracle 存储过程调用返回游标的另一个存储过程。

    一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...

  2. 在SQLSERVER中创建DBLINK,操作远程服务器数据库

    --配置SQLSERVER数据库的DBLINK exec sp_addlinkedserver @server='WAS_SMS',@srvproduct='',@provider='SQLOLEDB ...

  3. Jmeter自动化测试 数据驱动测试,将数据存入csv文件中来调用,或将数据存在DB中进行调用

    1. 将测试的用例名称,测试请求方式,测试链接,预置数据,断言等都放到excel中,然后转成csv格式,在用Jmeter带的csv数据配置文件导入 运行之前将线程组中配置,线程数设置为1,循环的次数设 ...

  4. Java启动工程时,加载固定数据到Map中(不用每次访问数据库)

    如下:启动工程时,加载配置文件的用户名和密码到map中, 通过getKeyByValue()获取即可 import java.util.HashMap; import java.util.Map; i ...

  5. Python中如何从数据库把数据导入excel中

    import pymysql,xlwt #1.连接mysql #2.执行sql语句 #3.获取到sql执行结果 #4.写入excel def conn_mysql(sql): conn = pymys ...

  6. C#实现不安装Oracle客户端访问远程服务器数据!!

    概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或 ...

  7. C#实现不安装Oracle客户端访问远程服务器数据

    概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或 ...

  8. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  9. 如何完成dedecms外部数据库调用|跨数据库数据调用

    第1步:打开网站include\taglib文件夹中找到sql.lib.php文件,并直接复制一些此文件出来,并把复制出来的这个文件重命名为mysql.lib.php. 注:mysql.lib.php ...

随机推荐

  1. python初学-列表

    列表操作: 列表一般需要先调用方法后才能打印,不能直接打印调用的方法 因为列表可以修改 一般不会返回一个新列表 # 列表 # new_names = ['lzc','lzc2','lzc3'] # 下 ...

  2. springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置

    web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet- ...

  3. IntelliJ IDEA centos安装

    安装的时候注意: 不要装一个插件否则无法启动!!!

  4. 多路复用I/O模型select() 模型 代码实现

    多路复用I/O:  socket编程之select(),poll(),epoll() 代码: client.c #include <stdio.h> #include <sys/ty ...

  5. Django Ajax学习二之csrf跨站请求伪造

    方式1 $.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, }); 方式2 # html文件from表单中<form& ...

  6. python字符编码与解码 unicode,str

    解释以下几个问题: (1)python2中str和unicode是两种字符串类型,与字符编码方式是什么关系? (2)str和unicode是怎么相互转换的? (3)'\x...':'\u...', ' ...

  7. [你必须知道的.NET]第二十五回:认识元数据和IL(中)

    发布日期:2009.02.25 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 书接上回[第二十四回:认识元数据和IL(上)], ...

  8. Sql server2008中merge用法

    /// <summary> /// 修改:添加条件: AND roleModule.FuncCode = tvpRoleModule.FuncCode /// </summary&g ...

  9. (2)ansible主机清单文件inventory

    1)inventory作用 作用:通常用于定义要管理主机的认证信息,例如ssh登录用户名,密码等相关信息 缺省文件:/etc/ansible/hosts 2)定义主机组方式 #vim /etc/ans ...

  10. 关于php的session.serialize_handler的问题

    前言 php的session信息是储存在文件中的 session.save_path="" 指定储存的路径 session.save_handler="" 指定 ...