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