差异,不透明

时间:2012-01-05 23:46:33

标签: sql-server sql-server-2005 tsql

我想获得两个生成和加入相对昂贵的结果集的差异。我之所以提到这一点是因为我可以设想需要多次连接集合的解决方案(例如,使用UNION)。我需要采用以下格式:Name sysname, OldValue varchar(max), NewValue varchar(max)

假设两个结果集看起来都像FirstName varchar(32), LastName varchar(32), Age int, BirthDate datetime,加上一些不会对差异结果集做出贡献的连接列。

我的第一个想法是

select
  case when a.FirstName <> b.FirstName then a.FirstName as FirstName_Old,
  case when a.FirstName <> b.FirstName then b.FirstName as FirstName_New,
  /* and so on, for remaining columns */

然后创建两个不相关的结果集,一个用于旧值,一个用于新值,然后加入它们。听起来很可怕。有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

好吧,你已经离开了ELSE,如果其中任何一个(或更糟糕的是,两者)都是NULL,那么比较也将是假的。

除了这些问题之外,它可能和你要获得的效率一样高。

如果差异集通常很小(但是要获得它的工作量很大),你可以只将差异插入到临时表中,然后使用一种不那么视觉上不优雅的技术从那里工作(但需要多次扫描)。