簡體   English   中英

拉出Audit Trail的記錄

[英]Pull records for Audit Trail

我正在我的應用程序中實現審計跟蹤。 我遵循了這個創建了歷史表,只需要審計的表。

我有一個下表來存儲患者信息。

TenantId代表每個租戶數據,因為它是一個多租戶應用程序

PersonPatient

Id,TenantId,FirstName,LastName,DOB,Mobile,Email,AddedBy,UpdatedBy,IsDeleted

患者

Id,PatientIDentifier,IsOP,CanSendSMS,AddedBy,UpdatedBy,IsDeleted

還有另一張表

約定

Id,PatientId,AppointmentDate,DoctorId,Price,AddedBy,UpdatedBy

審計歷史表結構

PersonH​​istory

AuditId,Id,FirstName,LastName,DOB,AddedBy,UpdatedBy,AuditUserId,AuditDate,Action

這里Action表示A(ADD)/U(update)/D(delete)

Patient, Appointment創建了相同的結構

現在,每當添加/刪除/更新發生時,我都會在歷史表中插入觸發器。

現在,我在審計歷史記錄表中獲得了可用的數據。

我必須為兩個要求編寫查詢。

  1. 獲取特定患者的所有記錄。 我需要使用PatientId從PatientHostory,AppointmentHistory,PersonH​​istory中提取所有記錄。 對於給定的id,我們如何編寫從同一個表中獲取更多記錄的SQL? UNION or JOIN

  2. 我需要從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.

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