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

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. day07-数据类型及标识符

    数据类型 强类型语言 要求变量的使用严格要严格符合规定,所有变量都必须先定义后才能使用 弱类型语言 java的数据类型分为两大类 基本类型(primitive type) 数值类型 整数类型 byte ...

  2. AOT漫谈专题(第四篇): C#程序如何编译成Native代码

    一:背景 1. 讲故事 大家都知道所谓的.NET Native AOT即通过AOT编译器直接将C#代码编译成机器码,大家也习惯用C/C++的编译过程来类比,都是静态编译本质上都差不多,这篇我们借助工具 ...

  3. 高性能 Nginx HTTPS 调优 - 如何为 HTTPS 提速 30%

    为什么要优化 Ngin HTTPS 延迟 Nginx 常作为最常见的服务器,常被用作负载均衡 (Load Balancer).反向代理 (Reverse Proxy),以及网关 (Gateway) 等 ...

  4. springBoot项目启动卡在Root WebApplicationContext: initialization completed... (非DEBUG断点问题)

    通过源码启动排查发现,初始化连接池时创建了200次,通过配置文件中将initialSize值改为10,启动时间从1分钟变为了3秒.

  5. 3.11 Linux删除空目录(rmdir命令)

    和 mkdir 命令(创建空目录)恰好相反,rmdir(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为: [root@localhost ~]# rm ...

  6. 拯救php性能的神器webman-打包二进制

    看了看webman的官方文档,发现居然还能打包为二进制,这样太厉害了吧! 先执行这个  composer require webman/console ^1.2.24 安装这个console的包,然后 ...

  7. Redis未授权漏洞复现

    目录 Redis 漏洞的产生条件及利用 Redis环境搭建 漏洞复现 利用Redis写入Webshell 利用Redis写入SSH公钥 利用Redis写入计划任务 Redis安全防护 Redis re ...

  8. XSS跨站脚本之portswigger labs练习

    目录 1 什么是XSS 2 XSS的类型有哪些 3 XSS攻击的过程和原理 4 XSS的防御 5 可能会用到的XSS Payload资源 6 靶场训练 portswigger labs 6.1 没有任 ...

  9. ElementUI ---- dialog点击取消后蒙遮层不消失

    场景: 页面A打开了 dialog, 然后点击 页面A dialog 的按钮 跳转到 页面B,并且打开页面B的 dialog 但是页面B的 dialog 关闭后,蒙遮层并没消失(已经设置了 :appe ...

  10. 通向架构师的道路(第二十四天)之Oracle性能调优-朝拜先知之旅

    前言 这次,我们将在Linux下来动手完成Oracle数据库的安装与使用. Oracle本身是可以免费下载的包括 它的企业版以及被它收购的Weblogic和Sun中的几乎任何东西你都可以拿来下载和使用 ...