使用T-SQL识别跨分支迁移客户的数据匹配异常
T-SQL实现02到04分支客户迁移数据一致性校验
基础信息
客户主表为customers,字段说明:
branch:分支编号cust_code:客户编号post_code:邮编email:电子邮箱tel:固定电话mob:手机号码
迁移规则要求:客户从02分支迁移到04分支后,仅cust_code重新生成,其余字段必须和原记录完全一致。已有新旧cust_code的完整映射关系,假设存储映射的表为cust_code_mapping,包含old_cust_code(02分支原客户编号)、new_cust_code(04分支新客户编号)两个字段,实际使用时替换为你环境中映射表的真实名称即可。
校验逻辑说明
逐对关联新旧客户记录,对比除cust_code外的所有字段,只要有一个字段值不一致就标记为异常:
- 所有非
cust_code字段完全一致:校验通过 - 任意字段值存在差异:识别为异常,标记具体差异字段
- 示例验证:
- 02分支
cust_code=1234与04分支cust_code=1432字段全匹配,校验通过 - 02分支
cust_code=8528与04分支cust_code=6132的post_code字段不一致,标记异常 - 02分支
cust_code=8523与04分支cust_code=7463的email字段不一致,标记异常
- 02分支
校验查询语句
SELECT map.old_cust_code AS 原02分支客户号, map.new_cust_code AS 新04分支客户号, CONCAT_WS(';', CASE WHEN c2.post_code <> c4.post_code THEN 'post_code(邮编)不一致' END, CASE WHEN c2.email <> c4.email THEN 'email(邮箱)不一致' END, CASE WHEN c2.tel <> c4.tel THEN 'tel(固话)不一致' END, CASE WHEN c2.mob <> c4.mob THEN 'mob(手机号)不一致' END ) AS 差异字段说明 FROM cust_code_mapping map INNER JOIN customers c2 ON c2.branch = '02' AND c2.cust_code = map.old_cust_code INNER JOIN customers c4 ON c4.branch = '04' AND c4.cust_code = map.new_cust_code WHERE c2.post_code <> c4.post_code OR c2.email <> c4.email OR c2.tel <> c4.tel OR c2.mob <> c4.mob
兼容NULL值说明:如果业务字段允许为空,SQL Server 2022及以上版本可以把
<>替换为IS DISTINCT FROM,低版本可以用ISNULL(c2.字段名,'') <> ISNULL(c4.字段名,'')的写法,避免NULL值对比漏判。
如果需要导出全量配对结果(含校验通过的记录),删除WHERE子句即可,校验通过的记录差异字段说明列会返回空值。
内容的提问来源于stack exchange,提问作者noddyrams
相关产品推荐
相关产品推荐

