2つの結果セットの差分を生成し、生成して結合するのが比較的高価です。私はこれを言及します。なぜなら、複数のセットに参加する必要があるソリューション(例えば、UNION
を使用して)を想像できるからです。私は以下のフォーマットでそれを必要とします:Name sysname, OldValue varchar(max), NewValue varchar(max)
。差分、アンピボット
たとえば、両方の結果セットがFirstName varchar(32), LastName varchar(32), Age int, BirthDate datetime
のように見えて、diff結果セットに寄与しない結合カラムがいくつかあるとします。
私が最初に考えたのは、それらに参加、その後、2つのアンピボットの結果セット、古い値に1つ、新しいのための1つを作成
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 */
のようなものです。ひどいですね。これを行う簡単な方法はありますか?
私は 'ELSE'を省略していますが、nullは単純さをチェックしますが、それでも良い点はあります。あまりにも簡単なことはありません。 SQL 2008では、 'MERGE' +' OUTPUT'節で実行できるようです。それは正しいようですか?たぶんこれはアップグレードするのに良い時期です。 – Daniel