[英]Pull records for Audit Trail
我正在我的應用程序中實現審計跟蹤。 我遵循了這個 , 這創建了歷史表,只需要審計的表。
我有一個下表來存儲患者信息。
TenantId代表每個租戶數據,因為它是一個多租戶應用程序
Person
與Patient
表
人
Id,TenantId,FirstName,LastName,DOB,Mobile,Email,AddedBy,UpdatedBy,IsDeleted
患者
Id,PatientIDentifier,IsOP,CanSendSMS,AddedBy,UpdatedBy,IsDeleted
還有另一張表
約定
Id,PatientId,AppointmentDate,DoctorId,Price,AddedBy,UpdatedBy
審計歷史表結構
PersonHistory
AuditId,Id,FirstName,LastName,DOB,AddedBy,UpdatedBy,AuditUserId,AuditDate,Action
這里Action
表示A(ADD)/U(update)/D(delete)
為Patient, Appointment
創建了相同的結構
現在,每當添加/刪除/更新發生時,我都會在歷史表中插入觸發器。
現在,我在審計歷史記錄表中獲得了可用的數據。
我必須為兩個要求編寫查詢。
獲取特定患者的所有記錄。 我需要使用PatientId
從PatientHostory,AppointmentHistory,PersonHistory中提取所有記錄。 對於給定的id,我們如何編寫從同一個表中獲取更多記錄的SQL? UNION or JOIN
?
我需要從all the HistoryTable for the supplied AuditUser Id
所有記錄。
我該如何為此編寫查詢?
您可以UNION
日志數據,還可以考慮添加HistoryType
列以指示它所引用的表
SELECT AuditId, Id, FirstName, LastName, DOB, AddedBy, UpdatedBy,
AuditUserId, AuditDate, Action, 'Person' HistoryType
FROM PersonHistory ph
JOIN Person p ON ph.id = p.id
UNION ALL
SELECT AuditId,Id, FirstName, LastName, DOB, AddedBy, UpdatedBy,
AuditUserId, AuditDate, Action, 'Patient' HistoryType
FROM PatientHistory
UNION ALL
SELECT AuditId,Id, FirstName, LastName, DOB, AddedBy, UpdatedBy,
AuditUserId, AuditDate, Action, 'Appointment' HistoryType
FROM AppointmentHistory
將上述內容轉換為VIEW
可以讓您更輕松地進一步查詢數據
SELECT * FROM vAuditHistory
WHERE AuditUserId = 1234
如果您需要從“原始”數據中獲取信息,即PatientId
然后再次使用該視圖,您可以執行某些操作。
DECLARE @PatientId VARCHAR(10) = '12345ABCDE'
SELECT h.*, p.PatientId
FROM vAuditHistory h
JOIN Patient pt ON pt.id = h.id
WHERE h.HistoryType = 'Patient'
AND pt.PatientId = @PatientId
UNION ALL
SELECT h.*, a.PatientId
FROM vAuditHistory h
JOIN Appointment a t ON a.id = h.id
WHERE h.HistoryType = 'Appointment'
AND pt.PatientId = @PatientId
或沒有觀點
SELECT h.*, p.PatientId
FROM PatientHistory h
JOIN Patient pt ON pt.id = h.id
WHERE pt.PatientId = @PatientId
UNION ALL
SELECT h.*, a.PatientId
FROM AppointmentHistory h
JOIN Appointment a t ON a.id = h.id
WHERE pt.PatientId = @PatientId
將上述內容創建為內聯函數可能很有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.