Sqlsugar 跨库查询小心得(同服务器不同数据库)
同一个服务器下的不同数据库,目前还没有进行跨服务器的查询,以后有待研究……
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 跨库查询小心得(同服务器不同数据库)的更多相关文章
- SQLServer跨库查询--分布式查询(转载)
--用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sq ...
- 跨库查询(OpenDataSource)与链接服务器(Linking Server)
一:跨库查询 Openrowset/opendatasource() is an ad-hoc method to access remote server's data. So, if you on ...
- 如何使用SQL SERVER数据库跨库查询
SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...
- SqlServer跨库查询
由于业务的拆分,数据库拆分为两种作用: 汇总数据库(Master,头节点数据库), 子节点数据库(Compute Node,计算子节点数据库) 这样,就设计到子节点访问头节点数据库中的某张汇总表,这种 ...
- ACCESS-如何多数据库查询(跨库查询)
测试通过:ACCESSselect * from F:\MYk.mdb.tablename说明:1.查询语句2.来原于哪(没有密码是个路径)3.查询的表名 ====================== ...
- EF 跨库查询
原因:最近公司项目,遇到一个ef跨库查询的问题.(只是跨库,并不是跨服务器哈) 主要我们的一些数据,譬如地址,城市需要查询公共资料库. 但是本身我的程序设计采用的是ef框架的.因此为这事花费了1天时间 ...
- mysql 跨库查询问题
MySQL实现跨服务器查询 https://blog.csdn.net/LYK_for_dba/article/details/78180444 mysql> create database l ...
- SQLServer跨库查询--分布式查询
出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临 ...
- oracle使用dblink跨库查询的例子
本文介绍了oracle数据库使用dblink进行跨库查询的方法,oracle dblink跨库查询教程,需要的朋友参考下. oracle dblink跨库查询 方法一:首先,创建数据库链接: 复制 ...
- SQL Server创建dblink跨库查询
dblink是跨库查询的主要手段,在Oracle创建DbLink中已经演示了Oracle中如何创建及使用DbLink,这篇博客看看SQL Server中如何使用. 一.通过图形化界面直接创建 选择当前 ...
随机推荐
- python中队列deque的使用
队列,堆栈是程序开发中常用的两种数据存储模型.python中队列怎么运用呢?以下内容介绍了队列的使用和队列的函数. from collections import deque q = deque() ...
- 四、Spring Boot集成Spring Security之认证流程
二.概要说明 本文主要介绍登录登出业务流程,所以使用基于内存的用户名密码,暂不介绍授权相关内容,后续会详细介绍基于数据库的认证及授权 如何查看基于内存的默认用户名密码 如何配置基于内存的自定义用户名密 ...
- 自建互联网档案馆「GitHub 热点速览」
这两天北京的气温骤降,仿佛在提醒我们冬日的脚步已悄然而至,让人不禁感叹时间的飞逝,一年的时间"转瞬即逝". 如果你想留下互联网上的珍贵瞬间,避免它们消失在 404 错误中.这款开源 ...
- 30k的测试简历长这样,进来抄作业!
面试求职: 「面试试题小程序」,内容涵盖 测试基础.Linux操作系统.MySQL数据库.Web功能测试.接口测试.APPium移动端测试.Python知识.Selenium自动化测试相关.性能测试. ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
1.问题描述: 人脸活体检测页面会有声音提示,如何控制声音开关? 解决方案: 活体检测暂无声音控制开关,但可通过其他能力控制系统音量,从而控制音量. 活体检测页面固定音频流设置的是8(无障碍),获取的 ...
- 华为三折屏Mate XT
相关: https://www.youtube.com/watch?v=vMx3kVnp11Q
- Rust编程与项目实战-结构体
<Rust编程与项目实战>(朱文伟,李建英)[摘要 书评 试读]- 京东图书 (jd.com) 在Rust中,结构体(Struct)是一种自定义数据类型,它允许我们将多个相关的值组合在一起 ...
- UE4纯C++实现游戏快捷栏之创建快捷栏UI
作为一个在游戏界面中显示的快捷栏,我们需要在游戏运行时就显示出快捷栏UI,故我们创建两个Widget. 1.GameHUDWidget:负责游戏中界面UI的整体显示 2.ShortcutWidget: ...
- 在 Github Action 管道内集成 Code Coverage Report
Github Actions 我们的开源项目 Host 在 Github,并且使用它强大的 Actions 功能在做 CICD.单看 Github Actions 可能不知道是啥.其实它就是我们常说的 ...
- MPLS多协议标签交换
多协议标签交换 MPLS(Multiprotocol Label Switching)是一种网络协议,用于在数据包交换网络中高效地进行数据路由转发.MPLS通过引入标签(Label)来对数据包进行标识 ...