[英]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.