[转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器
本文转自: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存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器的更多相关文章
- Oracle 存储过程调用返回游标的另一个存储过程。
一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...
- 在SQLSERVER中创建DBLINK,操作远程服务器数据库
--配置SQLSERVER数据库的DBLINK exec sp_addlinkedserver @server='WAS_SMS',@srvproduct='',@provider='SQLOLEDB ...
- Jmeter自动化测试 数据驱动测试,将数据存入csv文件中来调用,或将数据存在DB中进行调用
1. 将测试的用例名称,测试请求方式,测试链接,预置数据,断言等都放到excel中,然后转成csv格式,在用Jmeter带的csv数据配置文件导入 运行之前将线程组中配置,线程数设置为1,循环的次数设 ...
- Java启动工程时,加载固定数据到Map中(不用每次访问数据库)
如下:启动工程时,加载配置文件的用户名和密码到map中, 通过getKeyByValue()获取即可 import java.util.HashMap; import java.util.Map; i ...
- Python中如何从数据库把数据导入excel中
import pymysql,xlwt #1.连接mysql #2.执行sql语句 #3.获取到sql执行结果 #4.写入excel def conn_mysql(sql): conn = pymys ...
- C#实现不安装Oracle客户端访问远程服务器数据!!
概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或 ...
- C#实现不安装Oracle客户端访问远程服务器数据
概述: C#通过使用ADO的方式在未安装Oracle数据库的前提下,客户端程序远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或 ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- 如何完成dedecms外部数据库调用|跨数据库数据调用
第1步:打开网站include\taglib文件夹中找到sql.lib.php文件,并直接复制一些此文件出来,并把复制出来的这个文件重命名为mysql.lib.php. 注:mysql.lib.php ...
随机推荐
- .NET Core、.NET Standard、Xamarin和.NET Framework对比
近日,微软发布了.NET Core 2.0,但是开发人员中间仍然存在一些疑惑,就是.NET Core..NET Standard.Xamarin和.NET Framework有什么不同. .NET F ...
- django使用haystack对接Elasticsearch实现商品搜索
# 原创,转载请留言联系 前言: 在做一个商城项目的时候,需要实现商品搜索功能. 说到搜索,第一时间想到的是数据库的 select * from tb_sku where name like %苹果手 ...
- C语言 ,两个字符串参数,判断是否包含另一个字符串,返回所在位置
char * cyp(char *s1,char *s2) { char *p = NULL; char *q = NULL; char *q1 = NULL; while(*s1!='\0') { ...
- HDR文件格式简介及其读写函数
转自:http://blog.csdn.net/lqhbupt/article/details/7828827 1.HDR简介HDR的全称是High-DynamicRange(高动态范围).在此,我们 ...
- python在windows下连接mysql数据库
一,安装MySQL-python python 连接mysql数据库需要 Python interface to Mysql包,包名为 MySQL-python ,PyPI上现在到了1.2.5版本.M ...
- 【hdoj_1398】SquareCoins(母函数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1398 此题采用母函数的知识求解,套用母函数模板即可: http://blog.csdn.net/ten_s ...
- 176. Second Highest Salary
Write a SQL query to get the second highest salary from the Employee table. +----+--------+ | Id | S ...
- JS中的对象和方法简单剖析
众所周知,在js中对象就是精髓,不理解对象就是不理解js. 那么什么事js中的对象呢? 在js中,几乎一切皆对象: Boolean ,String,Number可以是对象(或者说原生数据被认作对象): ...
- js判断网络连接情况:navigator.onLine
<body> <h1 id="text">websong</h1> </body> <script> var text= ...
- Aras Innovator 11 sp2安装
本文档记录Aras Innovator 11 sp2的安装过程 官方安装文档:http://www.aras.com/support/documentation/ Aras Innovator 11. ...