本文转自: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. MYSQL表中向SET类型的字段插入值时值之间不能有空格

    MYSQL 中有一种数据类型是 SET,首先我们查看一个包含 SET 类型字段的表结构: 接下来我们向表中插入数据: 按照上面的语句插入数据发现报错了,于是去掉了插入值之间的空格,然后插入成功:

  2. z-index失效的情况

    1.父标签 position属性为relative: 2.问题标签无position属性(不包括static): 3.问题标签含有浮动(float)属性. 4.问题标签的祖先标签的z-index值比较 ...

  3. Java8之Stream/Map

    本篇用代码示例结合JDk源码讲了Java8引入的工具接口Stream以及新Map接口提供的常用默认方法.    参考:http://winterbe.com/posts/2014/03/16/java ...

  4. 从零开始,学习web前端之HTML5开发

    什么是HTML5 HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定.是下一代 HTML 标准. 为什么要学习HTML5 HTML5定义了一系列新元素,如新语义标签 ...

  5. Supervisor-类unix系统下的进程控制工具

    如果你的英文足够好,请看官网的文档:http://supervisord.org/introduction.html 简介: Supervisor 类unix系统下的进程控制工具. 特性: 1.配置简 ...

  6. msyql安装

    1.安装msyql yum install -y ncurses-devel automake autoconf bison libtool-ltdl-devel cd /soft wget http ...

  7. KMS使用CLion作为IDE来调试

    KMS使用CLion作为IDE来调试,打开kms相应模块的目录,CLion自动识别相应的CMakeLists.txt. 然而会make失败,经搜索,看到Clion使用的自带的cmake,因此系统中安装 ...

  8. 转:fortios 5.4后门植入

    提示: 1.经过实验,fortios 5.4 beta4也是可以的. 2.在实验时,选择先下载fortios 5.2(做了快照),再升级5.4,则虚拟机挂载需要选择FortiGate-VM-disk1 ...

  9. Did Pong Lie? (差分系统 判负环)

    Did Pong Lie? 时间限制: 5 Sec  内存限制: 128 MB提交: 68  解决: 15[提交][状态][讨论版] 题目描述 Doctor Pong has two arrays o ...

  10. 【C++】析构函数的作用和用法

    一.定义1. 作用:对象消亡时,自动被调用,用来释放对象占用的空间2.特点:   (1) 名字与类名相同   (2) 在前面需要加上"~"   (3) 无参数,无返回值   (4) ...