OK皆さん、私には緊急の必要があります。私は、各フィールドの個々の監査テーブルに基づいて、アクティブなテーブルの複数のフィールドへの変更の正確な履歴をさかのぼって再作成する必要があります。現在、2012年10月16日から毎日これを行うSQL Serverエージェントジョブがありますが、履歴を2012年1月1日に戻すには、すぐにレコードを追加する必要があります。
私の問題をさらに複雑にするために、これらの監査記録に基づいて、毎日の変更をトップダウンで完全な階層に反映する必要があります。
これが私が持っているものです:
アクティブテーブル:
empId varchar(20),
first_name varchar(50),
last_name varchar(50),
cost_center varchar(20), -- need to re-create history
mgr_empId varchar(20), -- need to re-create history
start_dt date, -- starting date range of active record
end_dt date, -- end of active record - default value of 12/31/2999 = active record
hierarchy_empId varchar (200), --derived field from a nasty self-referencing function (12x)
hierarchy_name varchar(1000) -- derived from the same function as the field above.
例:
従業員A1000のTimLeeは、2012年3月1日にマネージャーのBillAとempIdB1000を使用してコストセンター01552に組織に入ります。
A1000ティムリー01552B10003/1/2012 12/31/2999B1000>A1000ビルA>ティムリー B1000ビルA01552NULL2011年1月1日12/31/2999B1000ビルA
2012年5月1日に、夜間のジョブはティムのデルタを取得し、ティムのコストセンターは31550に変更されます。したがって、彼の現在のレコードは昨日の終了日で更新され、新しい「現在の」レコードが入力されます。
A1000ティムリー01552B10002012年3月1日2012年4月30日B1000>A1000ビルA>ティムリー B1000ビルA01552NULL2011年1月1日12/31/2999B1000ビルA A1000ティムリー31550B10005/1/2012 12/31/2999B1000>A1000ビルA>ティムリー
2012年6月15日、新しいマネージャーのベンC、従業員ID C1000が、ティムのマネージャーの下に雇われました。
A1000ティムリー01552B10002012年3月1日2012年4月30日B1000>A1000ビルA>ティムリー B1000ビルA01552NULL2011年1月1日12/31/2999B1000ビルA A1000ティムリー31550B10002012年5月1日2012年6月14日B1000>A1000ビルA>ティムリー C1000ベンC31550A1000 6/15/2012 12/31/2999A1000>C1000ビルA>ベンC A1000ティムリー31550B10006/15/2012 12/31/2999 B1000>C1000>A1000ビルA>ベンC>ティムリー
これらの更新は、階層を少しずつ下がる必要があります。したがって、ティムの上で何かが変わった場合、それは彼の記録にも反映されなければなりません。
7/15に、Timの元のマネージャーであるBill Aは、新しいマネージャーであるMark S、empIdX3000を取得します。
A1000ティムリー01552B10002012年3月1日2012年4月30日B1000>A1000ビルA>ティムリー B1000ビルA01552NULL2011年1月1日2012年7月14日B1000ビルA A1000ティムリー31550B10002012年5月1日2012年6月14日B1000>A1000ビルA>ティムリー C1000ベンC31550A1000 6/15/2012 7/14/2012A1000>C1000ビルA>ベンC A1000ティムリー31550C10002012年6月15日2012年7月14日B1000>C1000>A1000ビルA>ベンC>ティムリー X3000マークS01000NULL 7/15/201212/31/2999X3000マークS A1000ティムリー31550C10007/15/2012 12/31/2999 X3000> B1000>C1000>A1000マークS>ビルA>ベンC>ティムリー B1000ビルA01552X3000 7/15/2012 12/31/2999X3000>B1000マークS>ビルA C1000ベンC31550B1000 7/15/2012 12/31/2999 X3000>B1000>C1000マークS>ビルA>ベンC
私はこれらの監査テーブルを持っています:
tblManagerAudit
empId varchar(20),
chgTimestamp datetime,
oldMgr varchar(20),
newMgr varchar(20)
tblCostCenterAudit
empId varchar(20),
chgTimnestamp datetime,
oldCostCenter varchar(20),
newCostCenter varchar(20)
私は非常に長い間、監査記録を組み合わせる方法に苦労しており、あらゆる入力に感謝しています。