同一个服务器下的不同数据库,目前还没有进行跨服务器的查询,以后有待研究……

1.使用的是Left Join左查询,因此连接字符串应该是写的第一个表所在的数据库的连接字符串

假设数据库A,B,连接字符串分别为

A
server=localhost;Port=8090;user id=sa;password=123456;persistsecurityinfo=True;database=A;Charset=utf8;SslMode=none;Pooling=true;allowPublicKeyRetrieval=true
B
server=localhost;Port=8090;user id=sa;password=123456;persistsecurityinfo=True;database=B;Charset=utf8;SslMode=none;Pooling=true;allowPublicKeyRetrieval=true

一开始我陷入一个误区,我以为连接字符串的database参数只能写一个数据库,那就只能访问这一个数据库。那怎么去访问另一个呢?

2.1   左连接第一个查询的表tr_devicepoleinproject是数据库B里的表,则使用的DB应是  采用数据库B的连接字符串

  若是我第一个查询的是数据库B内的表,则连接字符串应以数据库B的为主。  若是不以此种方式去建立连接则无法查询

2.2  每一个查询表的后面要跟上这个表所在的数据库和表名   

   即     .AS<表A>("数据库A.表A")      AS<表B>("数据库A.表B")     

      .AS<表A1>("数据库B.表A1")    .AS<表B1>("数据库B.表B1") 

注意第一个查询的表不需要带<>  直接写  AS("“数据库名.表名”)  即可

剩下的就是正常的Left  join  查询   具体参考代码 如下:↓↓↓↓↓↓

            var counts = DB_B.Queryable<tr_devicepoleinproject>().AS("B.tr_devicepoleinproject")
.LeftJoin<tr_devicepoleindevice>((a, b) => a.DevicePoleID == b.DevicePoleID).AS<tr_devicepoleindevice>("B.tr_devicepoleindevice")
.LeftJoin<tr_deviceinoperationcompany>((a, b, c) => b.DeviceID == c.DeviceID).AS<tr_projectdevelopercompanyinoperationcompany>("B.tr_projectdevelopercompanyinoperationcompany")
.LeftJoin<tb_device>((a, b, c, d) => d.DeviceID == b.DeviceID).AS<tb_device>("B.tb_device")
.LeftJoin<tb_project>((a, b, c, d, e) => a.ProjectID == e.ProjectID).AS<tb_project>("B.tb_project")
.LeftJoin<tb_devicepole>((a, b, c, d, e, f) => a.DevicePoleID == f.DevicePoleID).AS<tb_devicepole>("B.tb_devicepole")
.LeftJoin<tb_operationcompany>((a, b, c, d, e, f, g) => c.OperationCompanyID == g.ID).AS<tb_operationcompany>("B.tb_operationcompany")
.LeftJoin<tb_monitordataday>((a, b, c, d, e, f, g, h) => a.DevicePoleID == h.PoleID && (h.UploadTime >= Convert.ToDateTime($"{start}") && h.UploadTime <= Convert.ToDateTime($"{end}"))).AS<tb_monitordataday>("A.tb_monitordataday")
.Where((a,b,c,d,e)=>e.ProjectDistrictID==3)
.GroupBy((a, b)=> new { b.DeviceID })
.Select((a, b, c, d, e, f, g, h) => new ExportData
{
MNCode = !string.IsNullOrWhiteSpace(h.DeviceMNCode) ? h.DeviceMNCode : d.MNCode,
//Tsp = h.MetricA34001 > 0 ? h.MetricA34001.ToString() : null, SqlFunc.AggregateAvg(it.Id)
Tsp = (double)SqlFunc.AggregateAvg(h.MetricA34001),
ProjectName = e.ProjectName,
ProjectAddress = e.ProjectAddress,
OperationCompanyName = g.CompanyName,
CreateTime = e.CreateTime.ToString(),
Status = f.Status == 0 ? "新增未上线" : f.Status == 1 ? "正常" : f.Status == 2 ? "维护" : f.Status == 3 ? "更换" : f.Status == 4 ? "暂停" : "拆除"
}).ToList();

总结:也是第一次做跨库的查询,难免陷入旧思想的误区,以为需要填入不同的连接字符串才能建立连接,甚至想到分开查询两个数据库的值,然后再进行查询,不过最后还是花费较少的代码去解决问题了,就是花在梳理业务逻辑上面挺多时间的,有待继续努力!!!

Sqlsugar 跨库查询小心得(同服务器不同数据库)的更多相关文章

  1. SQLServer跨库查询--分布式查询(转载)

    --用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sq ...

  2. 跨库查询(OpenDataSource)与链接服务器(Linking Server)

    一:跨库查询 Openrowset/opendatasource() is an ad-hoc method to access remote server's data. So, if you on ...

  3. 如何使用SQL SERVER数据库跨库查询

    SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...

  4. SqlServer跨库查询

    由于业务的拆分,数据库拆分为两种作用: 汇总数据库(Master,头节点数据库), 子节点数据库(Compute Node,计算子节点数据库) 这样,就设计到子节点访问头节点数据库中的某张汇总表,这种 ...

  5. ACCESS-如何多数据库查询(跨库查询)

    测试通过:ACCESSselect * from F:\MYk.mdb.tablename说明:1.查询语句2.来原于哪(没有密码是个路径)3.查询的表名 ====================== ...

  6. EF 跨库查询

    原因:最近公司项目,遇到一个ef跨库查询的问题.(只是跨库,并不是跨服务器哈) 主要我们的一些数据,譬如地址,城市需要查询公共资料库. 但是本身我的程序设计采用的是ef框架的.因此为这事花费了1天时间 ...

  7. mysql 跨库查询问题

    MySQL实现跨服务器查询 https://blog.csdn.net/LYK_for_dba/article/details/78180444 mysql> create database l ...

  8. SQLServer跨库查询--分布式查询

    出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临 ...

  9. oracle使用dblink跨库查询的例子

    本文介绍了oracle数据库使用dblink进行跨库查询的方法,oracle dblink跨库查询教程,需要的朋友参考下.   oracle dblink跨库查询 方法一:首先,创建数据库链接: 复制 ...

  10. SQL Server创建dblink跨库查询

    dblink是跨库查询的主要手段,在Oracle创建DbLink中已经演示了Oracle中如何创建及使用DbLink,这篇博客看看SQL Server中如何使用. 一.通过图形化界面直接创建 选择当前 ...

随机推荐

  1. 云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6

    开源项目推荐 Kueue Kueue 是一套用于作业队列的 API 和控制器.它是作业级管理器,可决定何时允许作业启动(如创建 pod),何时停止作业(如删除活动 pod). Reloader 一个 ...

  2. 自如月租计算 ziroom

    前言 自如的房子月租看似不高,实际上它是收中介费的,加上中介费和未满一年的押金,房租其实非常高. 普通中介费一般收1个月,自如的中介费美名其曰服务费(除了网费想不到有什么用的),一年为1.2个月租金. ...

  3. Cartographer学习——地图概率更新过程

    前言:最近一直在研究建图,对google的开源SLAM框架 Cartographer 进行了源码梳理,发现很多巧妙的算法设计,结合原论文 <Real-time Loop Closure in 2 ...

  4. JS 通过年份获取月,季度,半年度,年度

    原文请关注公众号 "酒酒酒酒"​,关注公众号 回复  "JS 通过年份获取月,季度,半年度,年度" 可获取源代码 功能描述: 实例化一个函数,给函数内传递不同的 ...

  5. 狂神说-Docker基础-学习笔记-02 Docker常用命令

    狂神说-Docker基础-学习笔记-02 Docker常用命令 1.帮助命令 docker version #查看版本信息 docker info #显示docker的系统信息 docker `命令` ...

  6. SpringBoot学习 _02 _配置单数据源(1)

    SpringBoot学习 _02 _配置单数据源(1) 1.通过IDEA创建SpringBoot项目 直接到选择依赖这一步,选择如图所示的 五个依赖即可 2.配置文件的编写 此处说明一下,这个数据库连 ...

  7. 初识GO语言--错误处理

  8. 一文彻底搞定Spring Security 认证,实现登陆登出功能

    Spring Security 是一个强大且灵活的安全框架,提供了身份验证(认证)和授权(授权)功能.下面我们将详细介绍 Spring Security 的认证功能流程,并提供自定义实现登录接口的示例 ...

  9. 动态避障-图扑自动寻路 3D 可视化

    自动寻路是机器人导航的核心技术,其原理主要涉及机器人与环境之间的复杂信息交互与处理.在自动寻路过程中,机器人依靠先进的传感器系统,如高清摄像头.精密激光雷达和灵敏超声波装置,全方位感知周围环境.这些传 ...

  10. C# 单例模式的多种实现

    单例模式介绍 单例模式是一种创建型设计模式,它主要确保在一个类只有一个实例,并提供一个全局访问点来获取该实例.在C#中,有多种方式实现单例模式,每种方式都有其特定的使用场景和注意事项. 设计模式的作用 ...