2017-07-18 62 views
0

我是个很简单的脚本返回两个表,“表A”和表A的副本名为“CopyOfTableA”之间的差异表之间列差异:TSQL - 使用except子句返回使用

SELECT TableId, Column1, Column2 FROM CopyOfTableA 
EXCEPT 
SELECT TableId, Column1, Column2 FROM TableA 

这将减去CopyOfTableA表和TableA之间的差异,并仅返回包含差异的那些行。

这工作正常,返回包含不同的行,但我的要求是返回不同的行,但只有填充包含不同 这样我就可以马上看到的差异行之间的列。

+0

我唯一能想到的就是完全连接并单独比较列。 – Jayvee

+0

谢谢Jayvee,你有没有一个解决方案的例子,生病了吗?当你说单独比较列时,我将使用哪个操作符? –

回答

1

东西就这些线:

select case when isnull(a.TableId,0)<>isnull(b.TableId,0) then 'Difference' else 'OK' end as TableIdCompare, 
    case when isnull(a.column1,'')<>isnull(b.Column1,'') then 'Difference...' else 'OK' as Column1Compare, 
    case when isnull(a.column2,'')<>isnull(b.Column2,'') then 'Difference...' else 'OK' as Column2Compare, 
from CopyOfTableA a 
full join TableA b 

请注意,当行缺少它会显示所有列的差异。此外,您可以通过在两个表格上添加值来定制案例陈述,以获得更多信息。

+0

应该'从CopyOfTableA b'别名为A而不是B? –

+0

另外,这种解决方案如何在具有几百万行的表上运行?全连接会为脚本执行增加额外的开销吗? –

+0

我修改了查询谢谢。是的,完整连接比集合连接要贵得多。根据列的数量,你也可以尝试除了Key,Column一个接一个并且联合结果 – Jayvee