Сравнение значений между двумя строками данных и отображение только разных столбцов

В предыдущей версии приложения мы использовали конкретное поле для первичного ключа, но поскольку поле может представлять разные идентификаторы в разных системах, мы сделали его несущественным полем (т.е. не первичным ключом или частью составного первичного ключа), однако, поскольку У нас нет другой системы, но пользователи все еще используют это поле в качестве основного метода идентификации.

Проблема заключается в аудите... ранее я использовал одну таблицу, чтобы выполнить все аудиты для базы данных, которая выгружает данные с помощью схемы с новым значением, используя общий триггер, который плавает вокруг. Это все еще может работать хорошо, за исключением одной вещи. Я перенес контактную информацию в отдельную таблицу, которая связана с новым первичным ключом исходной таблицы. Поэтому, когда вносятся изменения, незнакомый и неиспользованный первичный ключ отображается в журнале аудита вместо незначительного теперь ForeignSystemID...

Я перешел к выполнению метода аудита "один к одному", чтобы любые изменения в любой таблице теперь записывались в зеркальное отображение в другой схеме. Проблема сводится к тому, чтобы показать изменения пользователям. Они привыкли видеть отчет, который показывает только измененные значения для конкретного врача...

Мой вопрос заключается в том, чтобы использовать SQL-запросы и отчеты Crystal, как я могу показать только измененные значения столбцов между строками в моих таблицах аудита. Я посмотрел на команду pivot, но я не думаю, что это действительно поможет мне. Я также рассмотрел код в скрипте, который сравнивает столбцы и определяет, отличаются ли они, и записывает их в таблицу.

Я действительно вращаюсь в песке здесь, и это критическая проблема для меня, чтобы решить. Заранее благодарю за любую помощь...

мы достаточно рано начали производство, чтобы я мог изменить свой метод отслеживания изменений, если это будет необходимо, но это должно произойти в ближайшее время. Спасибо

РЕДАКТИРОВАТЬ:

Мой босс и я немного поработали над этим, и с этого мы и начали... Я хотел бы получить дальнейшие мнения и варианты... а также... спасибо...

CREATE TABLE #TEMP (
    DoctorsID bigint, 
    TableName varchar(50), 
    FieldName varchar(50), 
    CurrentFieldValue varchar(255), 
    PreviousFieldValue varchar(255), 
    PreviousValueDate datetime 
    )

DECLARE @sql varchar(MAX)

SELECT 
    @sql = COALESCE(@sql,'') + 
    CAST(
        'INSERT INTO #TEMP ' + 
            'SELECT ' + 
                'o.DoctorsID, ' + 
                '''' + TABLE_NAME + ''' ,' + 
                '''' + COLUMN_NAME + ''',' + 
                'o.' + COLUMN_NAME + ',' +
                'a.' + COLUMN_NAME + ',' +
                'a.AuditDate' +
            ' FROM ' + 
                'dbo.DoctorLicenses o ' + 
                    'INNER JOIN Audit.DoctorLicenses a ON ' + 
                        'o.DoctorsID = a.DoctorsID ' + 
            'WHERE ' + 
                'AuditDate BETWEEN ''10/01/2010'' AND ''10/31/2010'' AND ' + 
                'o.' + COLUMN_NAME + ' <> a.' + COLUMN_NAME + 
            ';'     
    AS varchar(MAX))
FROM 
    INFORMATION_SCHEMA.COLUMNS AS [Fields]      
WHERE 
    TABLE_SCHEMA = 'dbo' AND 
    TABLE_NAME = 'DoctorLicenses' 

PRINT @sql

EXEC(@sql)

SELECT * FROM #TEMP

DROP TABLE #TEMP

1 ответ

Для меня это звучит так, как будто есть проблема с дизайном, но мне трудно представить, каков ваш дизайн на данный момент. Можете ли вы более точно определить, как выглядят ваши таблицы в настоящее время и на каких данных вы пытаетесь сгенерировать отчет (ы)?

Кроме того, когда вы говорите об аудите "измененных значений", как вы отслеживаете то, что было изменено?

Другие вопросы по тегам