1

以前のアプリケーションバージョンでは、主キーに特定のフィールドを使用していましたが、フィールドはさまざまなシステム間で異なるIDを表す可能性があるため、重要ではないフィールド(つまり、主キーまたは複合主キーの一部ではない)にしました。別のシステムはありませんが、ユーザーは引き続きそのフィールドを主要な識別方法として使用します。

問題は監査にあります...以前は、単一のテーブルを使用してデータベースのすべての監査を実行し、浮動している汎用トリガーを使用してnewvalueoldvalueスキーマでデータをダンプしていました。これは、1つのことを除いて、引き続き正常に機能する可能性があります。連絡先情報を、元のテーブルの新しい主キーに関連付けられている別のテーブルに移動しました。したがって、変更が加えられると、今では重要ではないforeignSystemIDの代わりに、見慣れない未使用の主キーが監査ログに表示されます...

1対1の監査方法に移行し、テーブルへの変更が別のスキーマのミラーイメージに書き込まれるようにしました。問題は、ユーザーに変更を表示することです。彼らは、特定の医師の変更された値のみを示すレポートを見るのに慣れています...

私の質問は、SQLクエリとCrystalレポートを使用することですが、監査テーブルの行間で変更された列値のみを表示するにはどうすればよいですか。ピボットコマンドを見てきましたが、それが本当に役立つとは思いません。また、スクリプト内のコードを調べて、列を比較し、それらが異なるかどうかを判断して、テーブルに書き込みました。

私は本当にここの砂の中で回転しています、そしてこれは私が解決するための重要な問題です。助けてくれてありがとう...

必要に応じて変更追跡方法を変更できるように、本番環境は十分に早い段階にありますが、すぐに変更する必要があります。ありがとう

編集:

私の上司と私はこれに少し取り組んできました、そしてこれは私たちが始めたものです...私はさらなる意見とオプションを得たいです...同様に...ありがとう..

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
4

1 に答える 1

0

デザインの問題があるように聞こえますが、現時点であなたのデザインが何であるかを想像するのに苦労しています. 現時点でのテーブルの外観と、レポートを生成しようとしているデータについて、より具体的に教えていただけますか?

また、「変更された値」の監査について話すとき、何が変更されたかをどのように追跡しますか?

于 2010-10-28T18:21:27.540 に答える