Sql server 我需要找出哪些SQL列不匹配
这看起来有点复杂和混乱 我有一张基本的桌子Sql server 我需要找出哪些SQL列不匹配,sql-server,Sql Server,这看起来有点复杂和混乱 我有一张基本的桌子 Schedule ( RowID, ScheduleName, ScheduleColumn1, ScheduleColumn2, ScheduleColumn3 ) 我有一个单独的应用程序将记录导入另一个表 ImportSchedule ( RowID, ScheduleName, ScheduleColumn1, ScheduleColumn2, Sc
Schedule
(
RowID,
ScheduleName,
ScheduleColumn1,
ScheduleColumn2,
ScheduleColumn3
)
我有一个单独的应用程序将记录导入另一个表
ImportSchedule
(
RowID,
ScheduleName,
ScheduleColumn1,
ScheduleColumn2,
ScheduleColumn3
)
现在我需要连接两个表并显示不匹配的记录。基本上,如果表ImportSchedules
的列ScheduleColumn1
,ScheduleColumn2
,ScheduleColumn3
与表Schedule
没有匹配的记录
在上述三列的左连接的帮助下,这很容易
困难的部分是找出哪个列不匹配,并将其列为失败原因。您可以做一个案例。。。对于每列()
每个列都有一个比较列,用于指示值是否相等。如果您想要一个单独的列,您可以使用相同的逻辑来连接不同的列,如下所示
SELECT
LTRIM(RTRIM(
CASE
WHEN A.ScheduleColumn1 = B.ScheduleColumn1 THEN ''
WHEN A.ScheduleColumn1 IS NULL AND B.ScheduleColumn1 IS NULL THEN ''
ELSE 'ScheduleColumn1' END
+ ' ' +
CASE
WHEN A.ScheduleColumn2 = B.ScheduleColumn2 THEN ''
WHEN A.ScheduleColumn2 IS NULL AND B.ScheduleColumn2 IS NULL THEN ''
ELSE 'ScheduleColumn2' END
+ ' ' +
--- other columns
)) AS Comparison
-- your join
我们使用数据比较工具(比如红门)。它提供了有关数据差异的完整信息:两个表中缺少行,更改了行
您能分享一些样本数据以及您试图获得的数据结果吗?这将使我们更容易理解您的问题并尝试解决它。
SELECT
LTRIM(RTRIM(
CASE
WHEN A.ScheduleColumn1 = B.ScheduleColumn1 THEN ''
WHEN A.ScheduleColumn1 IS NULL AND B.ScheduleColumn1 IS NULL THEN ''
ELSE 'ScheduleColumn1' END
+ ' ' +
CASE
WHEN A.ScheduleColumn2 = B.ScheduleColumn2 THEN ''
WHEN A.ScheduleColumn2 IS NULL AND B.ScheduleColumn2 IS NULL THEN ''
ELSE 'ScheduleColumn2' END
+ ' ' +
--- other columns
)) AS Comparison
-- your join