Простая концепция: мы в основном проводим одитинг, сравнивая, что вошло, и что на самом деле произошло во время обработки. Я ищу лучший способ выполнить запрос, который может выполнять параллельное сравнение таблиц со столбцами, которые немного отличаются по имени и типу потенциальных возможностей.
Макет БД:
Таблица (* - условие соединения)
Журнал (Неизмененная запись данных.)
- LogID
- RecordID *
- Имя
- Дата
- адрес
- Продукты
- и т. д.
Аудит (запись постобработки)
- CardID *
- CarName
- DeploymentDate
- ShippingAddress
- Опции
- и т. д.
Например, это будет работать , если вы посмотрите на досадную сложность записи и проблемы с производительностью.
Запрос просто объединяет левый и правый и выбирает их в виде строк. Отображение каждого поля соответствует.
select
cast(log.RecordID as varchar(40)) + '=' + cast(audit.CardID as varchar(40),
log.Name+ '=' + audit.Name ,
cast(log.Date as varchar(40)) + '=' + cast(audit.DeploymentDate as varchar(40),
log.Address + '=' + audit.ShippingAddress,
log.Products+ '=' + audit.Options
--etc
from Audit audit, Log log
where audit.CardID=log.RecordId
Что бы вывести что-то вроде:
1 = 1 Test = TestName 11/09/2009 = 11/10/2009 NULL = My Address NULL = Колеса
Это работает, но очень раздражает в сборке. Еще я подумал о том, чтобы просто создать псевдоним столбцов, объединить две таблицы и упорядочить их так, чтобы они были в форме списка. Это позволило бы мне увидеть сравнение столбцов. Это идет с очевидными накладными расходами на объединение всех.
т:
Журнал 1 Test 11/09/2009 null, null
Аудит 1 TestName 10.10.2009 Мой адрес Колеса
Есть ли какие-либо предложения по улучшению аудита этих данных?
Дайте мне знать, какие у вас могут быть другие вопросы.
Дополнительные примечания. Мы хотим уменьшить неважную информацию, чтобы в некоторых случаях мы могли обнулять столбец, если они равны (но я знаю, что он слишком медленный)
case when log.[Name]<>audit.[CarName] then (log.[Name] + '!=' + audit.[CarName]) else null end
или если мы делаем второй путь
nullif(log.[Name], audit.[CarName]) as [Name]
,nullif(audit.[CarName], log.[Name]) as [Name]