我有一系列的表,我必须互相审核。每个表的列数从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
记录id只是我想显示的一个标识符,但问题不是让e表中的所有列和live表中的所有列都显示出来,然后滚动查找罪魁祸首,只显示不正确的列。
如何更改我的声明。
第二部分是,有没有一种方法可以使这个超级动态的表可以在顶部设置为变量。所以我可以改变他们,因为我说了很多表审计。使用一个查询*谢谢。
1条答案
按热度按时间z9gpfhce1#
你可以用
cross apply
. 这有点棘手,因为您需要对齐数据类型-我不知道它们是什么,所以我使用了varchar(max)
无处不在: