我们目前有一个更改日志,该日志记录Windows数据库中表中的所有更改。该表中最重要的两个列是OldValue和NewValue列。当用户将TalentCategoryID从一个TalentCategoryID更改为另一个时,它会显示ID#的更改。我不希望显示TalentCategoryID,而是希望看到与TalentCategoryID关联的名称,该名称在单独的表TalentCategories中具有名称/ id关系。
我遇到的问题是我不能简单地进行联接,因为TalentCategoryID位于OldValue和NewValue列中,而它们并不是严格的TalentCategoryID,因为它是多个表,列和值的变更日志。
是否可以将OldValue和NewValue显示为TalentCategoryID的名称而不是ID本身?
这是我到目前为止的查询:
SELECT T.FirstName, T.LastName, A.TableName, A.ColumnName, A.OldValue, A.NewValue, TC.Name, A.UpdateDate
FROM [AuditLog] A
JOIN Talents T ON A.ModifiedPrimaryKey = T.TalentID
JOIN TalentCategories TC ON TC.TalentCategoryID = T.TalentCategoryID
WHERE TableName = 'Talents'
AND ColumnName = 'TalentCategoryID'
更新1/31/19下面
这是我通过查询拉下表AuditLog的结果
SELECT TOP 1000 * FROM dbo.AuditLog
WHERE ColumnName = 'TalentCategoryID'
我试图将OldValue / NewValue列从ID号更改为另一个名为TalentCategories的表中给出的实际Name值,该表具有一个ID列和一个Name列。目的是能够轻松识别TalentCategory从一个类别NAME更改为另一个类别NAME的时间,而无需查看TalentCategories表就可以看到ID号的变化,而我不知道它们的含义。以下是我要实现的目标的示例...
答案 0 :(得分:0)
我认为您只需要left join
TalentCategories
到旧值和新值上,请小心处理null
情况。类似于以下内容:
select
T.FirstName, T.LastName, A.TableName, A.ColumnName, A.OldValue, A.NewValue
, coalesce(TC1.[Name], 'Not Set') [Old Category Name]
, coalesce(TC2.[Name], 'Not Set') [New Category Name]
, A.UpdateDate
from [AuditLog] A
inner join Talents T ON A.ModifiedPrimaryKey = T.TalentID
left join TalentCategories TC1 on TC1.TalentCategoryID = A.OldValue
left join TalentCategories TC2 on TC2.TalentCategoryID = A.NewValue
where TableName = 'Talents' and ColumnName = 'TalentCategoryID'