我正在嘗試通過使用欄位“IsActive”和“EffectiveDate”來構建一個維度表,該表將識別當前和歷史資料。
IsActive 1 = 活動。
EffectiveDate = 記錄被攝取的日期。
場景:我有一個包含員工當前視圖的現有記錄,但是如果有關員工的任何資訊發生更改,我不想更新現有記錄,而是想創建一個新的行專案,其中更新的記錄變為活動狀態并且上一個記錄變得不活躍。
| ID | 姓名 | 姓 | 年齡 | 活躍 | 生效日期 |
|---|---|---|---|---|---|
| 1 | 約翰 | 美國能源部 | 54 | 1 | 2021-01-01 |
完成對員工資料的更改后,我想按如下方式更新表:
| ID | 姓名 | 姓 | 年齡 | 活躍 | 生效日期 |
|---|---|---|---|---|---|
| 1 | 約翰 | 美國能源部 | 54 | 0 | 2021-01-01 |
| 2 | 約翰 | 美國能源部 | 64 | 1 | 2021-06-25 |
我正在使用“姓名”、“姓氏”和“年齡”的組合來標識唯一記錄。我使用這三個欄位的原因是沒有提供其他資訊來唯一標識員工。
我真的很感激任何幫助。
uj5u.com熱心網友回復:
你可以自己做這件事,但我會先嘗試一下
- 源資料:

代碼:
Create procedure sp_employee AS SET NOCOUNT ON; BEGIN --update Active flag of existing data MERGE dim_employee AS Target USING employee_data AS Source ON Source.Name = Target.Name and Source.Surname = Target.Surname WHEN MATCHED THEN UPDATE SET Target.IsActive = 0; --Insert new data (assuming the table has only changed data set) Insert into dim_employee select Name, Surname, Age, IsActive, EffectiveDate from employee_data; End GO如果源表中有舊記錄以及新更改集,則可以使用以下代碼僅插入更改資料集。
Insert into dim_employee select Name, Surname, Age, IsActive, EffectiveDate from employee_data except select distinct a.Name, a.Surname, a.Age, a.IsActive, a.EffectiveDate from employee_data a inner join dim_employee b on a.Name = b.Name and a.Surname = b.Surname and a.Age = b.Age;執行存盤程序
Exec sp_employee;執行存盤程序后:此處“John Doe”的 IsActive 列資料更新為 0,并且從“employee_data”表中插入了“John Doe”的新記錄。

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332888.html
