簡體   English   中英

如何跟蹤SQL Server中記錄的更改?

[英]How to track changes in records in SQL Server?

我有下表,其中包含所有學生的跟蹤記錄。

|==========================================|
| ID      |  Department     | Date         |
|==========================================|
| 001     | English         | Feb 3 2017   |
| 001     | English         | Feb 4 2017   |
| 001     | Science         | Mar 1 2017   |
| 001     | Science         | Apr 2 2017   |
| 001     | Maths           | Apr 7 2017   |
| 002     | Maths           | Feb 1 2017   |
| 002     | Maths           | Apr 7 2017   |
| 003     | Maths           | Apr 3 2017   |
| 004     | Science         | Feb 1 2017   |
| 004     | Maths           | Apr 7 2017   |
|==========================================| 

我需要在學生更換系之前獲取以前的記錄。 對於上面的示例,返回的記錄集應為

對於001,

| 001     | English         | Feb 4 2017   |
| 001     | Science         | Apr 2 2017   |

對於002和003

沒有變化

對於004

| 004     | Science         | Feb 1 2017   |

同一用戶也有可能改回同一部門。 例如,user001可以從部門a更改為部門b再更改為部門c,然后再更改為部門a。 我已經閱讀了有關T-SQL發送和接收的信息。 但是不確定在這種情況下是否有幫助。 請幫忙。

一種方法是對分區使用ROW_NUMBER函數,以檢測Department列的值何時更改。

樣本數據

DECLARE @T TABLE (ID int, Department nvarchar(100), dt date);
INSERT INTO @T (ID, Department, dt) VALUES
(1, 'English', 'Feb 3 2017'),
(1, 'English', 'Feb 4 2017'),
(1, 'Science', 'Mar 1 2017'),
(1, 'Science', 'Apr 2 2017'),
(1, 'Maths  ', 'Apr 7 2017'),
(2, 'Maths  ', 'Feb 1 2017'),
(2, 'Maths  ', 'Apr 7 2017'),
(3, 'Maths  ', 'Apr 3 2017'),
(4, 'Science', 'Feb 1 2017'),
(4, 'Maths  ', 'Apr 7 2017');

詢問

WITH
CTE
AS
(
    SELECT
        ID
        ,Department
        ,dt
        ,ROW_NUMBER() OVER (PARTITION BY ID, Department ORDER BY dt DESC) AS rnPart
        ,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY dt DESC) AS rnID
    FROM @T
)
SELECT
    ID
    ,Department
    ,dt
FROM CTE
WHERE
    rnPart = 1
    AND rnID <> 1
ORDER BY
    ID
    ,dt
;

結果

+----+------------+------------+
| ID | Department |     dt     |
+----+------------+------------+
|  1 | English    | 2017-02-04 |
|  1 | Science    | 2017-04-02 |
|  4 | Science    | 2017-02-01 |
+----+------------+------------+

這可以通過在您要跟蹤的表上在插入/更新觸發器之后創建來完成。 使用在sql server中插入/刪除的邏輯表,您可以跟蹤表上新插入和修改的字段。

插入(邏輯表):它將為您提供新插入的記錄/更新值(列值)的詳細信息。

Deleted(邏輯表):它將為您提供字段的舊值,然后對其進行修改/刪除。

我不確定,但是您可以在存儲過程的概念上獲得幫助。 它們是數據庫的一部分。 您可以在查詢時設置顯示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM