如何对比Elg与VTrader数据库,找出Elg中未在VTrader存在的文件?
找出Elg数据库中未同步到VTrader的文件
完整查询语句(以昨日数据为例)
SELECT elg_files.FileName, elg_files.FileCatalogedOn FROM ( -- 合并Elg三张表的昨日文件记录 SELECT FileName, FileCatalogedOn FROM Elg.dbo.ElgFileQueue WHERE CAST(FileCatalogedOn AS DATE) = CAST(GETDATE()-1 AS DATE) UNION ALL SELECT FileName, FileCatalogedOn FROM Elg.dbo.RXFileQueue WHERE CAST(FileCatalogedOn AS DATE) = CAST(GETDATE()-1 AS DATE) UNION ALL SELECT FileName, FileCatalogedOn FROM Elg.dbo.CostFileQueue WHERE CAST(FileCatalogedOn AS DATE) = CAST(GETDATE()-1 AS DATE) ) AS elg_files LEFT JOIN VTrader.dbo.VTraderer vt ON elg_files.FileName = vt.OrigName -- 可选:仅对比同日期的文件,取消注释下方语句 -- AND CAST(elg_files.FileCatalogedOn AS DATE) = CAST(vt.StartDt AS DATE) WHERE vt.OrigName IS NULL ORDER BY elg_files.FileCatalogedOn DESC;
步骤拆解
合并Elg三张表数据
利用UNION ALL将三张结构一致的表(ElgFileQueue、RXFileQueue、CostFileQueue)的FileName和FileCatalogedOn字段合并成一个数据集。如果需要去重(同一文件可能出现在多张表),可以将UNION ALL替换为UNION(但UNION ALL执行效率更高)。关联VTrader筛选缺失文件
通过LEFT JOIN将合并后的Elg数据与VTrader的表关联,关联条件为FileName = OrigName。当VTrader中没有匹配的记录时,vt.OrigName会返回NULL,通过WHERE vt.OrigName IS NULL即可筛选出未同步到VTrader的文件。
注意事项
- 跨数据库表引用需使用完整格式:
[数据库名].[架构名].[表名],若你的表架构不是dbo,请替换为实际架构名称。 - 检查VTrader表名:你提供的示例中表名为
VTraderer,请确认是否为笔误(比如应为VTrader)。 - 若需查询所有历史未同步文件,只需删除所有
WHERE子句中的日期过滤条件即可。
内容的提问来源于stack exchange,提问作者Mistymanor
相关产品推荐
相关产品推荐

