【发布时间】:2020-09-22 10:58:04
【问题描述】:
我有一系列表必须相互审计。 每个表都有不同数量的列,从 4 到 40。 手头的任务是审计表A中的列ID和表B中的列ID等。
我的代码是这样的
SELECT mismatch_field =
CASE WHEN E.id <> Live.id THEN 'ID'
WHEN E.FirstName <> Live.FirstName THEN 'FirstName'
WHEN E.LastName <> Live.LastName THEN 'LastName'
WHEN E.WEB_Name <> Live.WEB_Name THEN 'WEB_Name'
END,
E.*,
'<-EDI -- LIVE->',
Live.*
from #upld_TEST E
left outer join #upld_LIVE Live on E.id = Live.id
WHERE ( E.id <> Live.id OR
E.FirstName <> Live.FirstName OR
E.LastName <> Live.LastName OR
E.WEB_Name <> Live.WEB_Name )
ORDER BY CASE WHEN E.id <> Live.id THEN 'id'
WHEN E.FirstName <> Live.FirstName THEN 'FirstName'
WHEN E.LastName <> Live.LastName THEN 'LastName'
WHEN E.WEB_Name <> Live.WEB_Name THEN 'WEB_Name'
END
这很简单。找到我不匹配的字段,并报告不匹配的列和其余列以供审核。
我想要做的是让输出稍微简化。 如果 E.FirstName Live.FirstName,我希望输出读取 FirstName 然后显示一列中的 Test 字段和下一列中的 Live 字段 所以它看起来像这样(并且需要更少的滚动和查看)
#Upld_Test Record_id Upld_Test Upld_Live
ID 12 626 231
FirstName 24 John Mark
FirstName 55 Sam Jani
WebName 11 Lake Smith Lake Smith's
Record_Id 只是我想出现的一个标识符,但问题不是让 E 表中的所有列和 Live 表中的所有列出现,然后我滚动找到罪魁祸首只显示我不正确的。
如何更改我的陈述。
** 第二部分是有没有办法让这个超级动态的#temp_tables 可以设置为顶部的变量。这样我就可以更改它们,因为我说了很多要审核的表格。并使用一个查询 *** 谢谢。
【问题讨论】:
标签: sql sql-server database audit unpivot