Я хочу получить diff двух результирующих наборов, которые относительно дорого производить и объединяться. Я упоминаю об этом, потому что могу представить себе решения (например, используя UNION
), которые требуют объединения множеств несколько раз. Мне это нужно в следующем формате: Name sysname, OldValue varchar(max), NewValue varchar(max)
.Diff, unpivoted
Предположим, что оба набора результатов выглядят как FirstName varchar(32), LastName varchar(32), Age int, BirthDate datetime
, а также ряд соединительных столбцов, которые не будут вносить вклад в набор результатов diff.
Моя первая мысль что-то вроде
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 */
затем создать два unpivoted результирующих наборов, один для старых значений, один для нового, а затем присоединиться к ним. Звучит ужасно. Есть ли более простой способ сделать это?
Я пропустил 'ELSE' и нулевые проверки для простоты, но тем не менее хороший момент. Жаль, что нет более простого способа сделать это. В SQL 2008 кажется, что это можно сделать с помощью предложения 'MERGE' +' OUTPUT'. Правильно ли это? Возможно, сейчас самое подходящее время для обновления. – Daniel