基于XYZ数据库表字段更新ABC数据库Client表列的技术需求
解决方案:跨库匹配ClientName并更新字段
这个需求的核心难点是两个库的ClientName格式不统一,得先把XYZ库中名字里的「Scan」「Non-Scan」「Non Scan」这些后缀清理掉,才能和ABC库的名字匹配,进而更新对应的ScanId和NonScanId字段。
我给你写一个通用的SQL更新语句(这里以SQL Server为例,其他数据库比如MySQL只需要调整跨库引用的语法即可):
UPDATE abc_clients SET ScanId = CASE WHEN xyz_clients.IsScan = 1 THEN xyz_clients.data ELSE abc_clients.ScanId END, NonScanId = CASE WHEN xyz_clients.IsScan = 0 THEN xyz_clients.data ELSE abc_clients.NonScanId END FROM [Database ABC].dbo.Client AS abc_clients INNER JOIN [Database XYZ].dbo.Client AS xyz_clients ON -- 清洗XYZ表的ClientName,去除各种后缀,匹配ABC表的名字 REPLACE( REPLACE( REPLACE(xyz_clients.ClientName, ' Scan', ''), ' Non-Scan', '' ), ' Non Scan', '' ) = abc_clients.ClientName
语句说明:
- 字符串清洗:通过三次
REPLACE函数,把XYZ表中ClientName里三种不同形式的后缀都去掉,得到和ABC表完全一致的客户名称,实现关联匹配。 - 条件更新:用
CASE判断IsScan的值:- 当
IsScan = 1时,把XYZ表的data值赋值给ABC表的ScanId,不改动原有的NonScanId; - 当
IsScan = 0时,把XYZ表的data值赋值给ABC表的NonScanId,不改动原有的ScanId。
- 当
- 跨库关联:用
INNER JOIN确保只更新能匹配到的客户,避免无意义的NULL覆盖。
执行这个语句后,ABC库的Client表就会变成你想要的最终状态啦!
内容的提问来源于stack exchange,提问作者Ritesh Maharjan
相关产品推荐
相关产品推荐

