• 跨服务器、跨数据库、多表联合查询


    • 最近项目用到了跨数据库的多表联查,项目用的是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

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

  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/changfutao/p/4498094.html
Copyright © 2020-2023  润新知