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


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

    在存储过程调用不同数据库的数据该如何做,比如在存储过程名为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.字段名称=@i  
       
       
         
    --方法二:如果经常访问或数据量大,建议用链接服务器  
         
    --创建链接服务器  
    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跨平台数据访问

  • 相关阅读:
    20+ 个高质量的 Web 按钮设计 PSD 下载
    12 月份 10 个新鲜的 jQuery 插件和教程
    20+ 个有用的 Google 地图的 jQuery 插件和教程
    5个界面效果很炫的JavaScript UI框架
    分享50个使用非比寻常导航菜单设计的创20111227creati意网站
    8 款为 WordPress 文章生成缩略图的插件
    百万级访问量网站的技术准备工作
    推荐8个独特应用的JQuery拖放插件
    开源软件发展史【信息图】
    iOS应用开发应遵循的10条设计原则
  • 原文地址:https://www.cnblogs.com/sandy/p/2787766.html
Copyright © 2020-2023  润新知