zoukankan      html  css  js  c++  java
  • 跨服务器、跨数据库、多表联合查询

    • 最近项目用到了跨数据库的多表联查,项目用的是MVC4+EF,项目用到了很多数据库,每一个数据库都得建一个edmx文件,造成了项目的大量的edmx文件,这样给人一种项目很庞大很复杂,无疑间加剧了程序员编写代码的复杂度。
    • 如果是不同的服务器上的多表联查的话,会更加复杂。
    • 下面我讲一讲我自己的思路:

    首页假如我们有3台服务器,分别是操作数据库的服务器A,第二台服务器B192.168.1.136,第三台服务器C192.168.1.125

    注:关闭服务器上的防火墙(查询出错的话)

    我们在A服务器上建立UserA数据库的User_TA表,B上建立UserB数据库的User_TB表,C上建立UserC数据库的User_TC表

    User_TA表:

    1

    User_TB表:

    2

    User_TC表:

    3

    实例代码:

    select * from
    (
    select
        *
    from opendatasource
    (
        'SQLOLEDB',
        'Data Source=192.168.1.136;User ID=sa;Password=000'
    ).UserB.dbo.UserTB as t1
    ) as tt1
    
    join
    
    (
    select
        *
    from opendatasource
    (
        'SQLOLEDB',
        'Data Source=192.168.1.125;User ID=sa;Password=123'
    ).UserC.dbo.User_TC as t1
    ) as tt2 on tt1.UserID=tt2.UserID

    上面的代码虽然可以查询出来,但是给人一种繁琐的感觉,那么我们应该如何简化它呢,就想到了视图。

    首先将服务器B和C 的表在服务器A生成视图

    create View View_User_B
    as
    (
    select
        *
    from opendatasource
    (
        'SQLOLEDB',
        'Data Source=192.168.1.136;User ID=sa;Password=000'
    ).UserB.dbo.UserTB as t1
    ) as tt1
    )
    
    create View View_User_C
    as 
    (
     select
        *
    from opendatasource
    (
        'SQLOLEDB',
        'Data Source=192.168.1.125;User ID=sa;Password=123'
    ).UserC.dbo.User_TC as t1
    )

    那么我们就可以简化查询了:

    select * from dbo.View_User_B as  t1  join View_User_C as t2 on t1.UserID=t2.UserID

    这样就是实现了跨服务器,跨数据库多表联查了

  • 相关阅读:
    最近比较毁硬件
    如何编写 Visual C++ 的表达式分析插件
    Windows 安全性编程
    MMX写的memcpy测试
    今天终于摆平了DeskBand
    ASP.NET后台代码调用前台javascript脚本的方法
    ArcGIS Server 9.3前后台交互调用实现点定位
    Oracle中建立存储过程
    建表时自动增加oracle表中记录的ID值
    特定图层的渲染
  • 原文地址:https://www.cnblogs.com/changfutao/p/4498094.html
Copyright © 2011-2022 走看看