表结构如下,T,M有对应关系
T1 T2 T3 T4 M1 M2 M3 M4
1 A A A A A B A A
2 A C C C D D C C
取出 T,M 字段中被修改的字段及数值
显示结果有三列:被修改的字段,原内容,修改后的内容
结果格式显示如下:
被修改的字段 原内容 修改后的内容
T2 A B
T1,T2 A,C D,D
求大神指导,万分感谢。急急急!!!!
------解决思路----------------------
没有什么好的方式,也可以用动态执行
SELECT STUFF(CASE WHEN T.T1<>M.M1 THEN',T1'ELSE''END+CASE WHEN T.T2<>M.M2 THEN ',T2'ELSE''END
+CASE WHEN T.T3<>M.M3 THEN ',T3'ELSE''END+CASE WHEN T.T4<>M.M4 THEN ',T4'ELSE''END,1,1,'')[被修改的字段]
,STUFF(CASE WHEN T.T1<>M.M1 THEN ','+T.T1 ELSE''END+CASE WHEN T.T2<>M.M2 THEN ','+T.T2 ELSE''END
+CASE WHEN T.T3<>M.M3 THEN ','+T.T3 ELSE''END+CASE WHEN T.T4<>M.M4 THEN ','+T.T4 ELSE''END,1,1,'')[原内容]
,STUFF(CASE WHEN T.T1<>M.M1 THEN ','+M.M1 ELSE''END+CASE WHEN T.T2<>M.M2 THEN ','+M.M2 ELSE''END
+CASE WHEN T.T3<>M.M3 THEN ','+M.M3 ELSE''END+CASE WHEN T.T4<>M.M4 THEN ','+M.M4 ELSE''END,1,1,'')[修改后的内容]
FROM T JOIN M ON T.对应字段=M.对应字段
------解决思路----------------------
当看到第二条逗号分隔,我醉了.
还是分两步走吧,既容易看懂,又容易修改
1 查出所有有修改的记录
select * from table where t1<>m1 or t2<>m2 or t3<>m3 or t4<>m4
2 取出记录后,循环一遍,将有变化的字段名,原值,新值用逗号拼接好.