SQL Server一对多表字段拼接后更新主表字段的简便方法问询
SQL Server 实现跨表字段拼接更新方案
方案1:适用SQL Server 2017及更高版本
使用内置STRING_AGG函数实现拼接,语法更简洁高效:
UPDATE t1 SET t1.AddtionalTripLineInfo = t2.concat_content FROM Table1 t1 INNER JOIN ( SELECT TripID, -- 可根据实际需求调整字段分隔符、条目分隔符 STRING_AGG(CONCAT(SequenceNo, '|', Miles, '|', Cost, '|', Time), ';') AS concat_content FROM Table2 GROUP BY TripID ) t2 ON t1.TripID = t2.TripID
如果字段存在NULL值,可以用ISNULL(字段名, '')包裹对应字段,避免NULL导致整段拼接结果为空。
方案2:兼容SQL Server 2008~2016版本
使用FOR XML PATH实现字符串拼接,适配低版本环境:
UPDATE t1 SET t1.AddtionalTripLineInfo = STUFF( ( SELECT ';' + CONCAT(SequenceNo, '|', Miles, '|', Cost, '|', Time) FROM Table2 t2 WHERE t2.TripID = t1.TripID ORDER BY SequenceNo -- 保证拼接顺序和条目序号一致 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '' -- 去掉开头多余的分隔符 ) FROM Table1 t1 WHERE EXISTS ( SELECT 1 FROM Table2 t2 WHERE t2.TripID = t1.TripID )
内容的提问来源于stack exchange,提问作者JFManiac
相关产品推荐
相关产品推荐

