You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:如何使用多语句表值函数拆分地址表的地址字段为4列

解决方法:用APPLY运算符调用表值函数

嘿,这个场景我太熟了!普通JOIN没法满足需求的核心原因是表值函数需要接收每行的字段作为参数,而CROSS APPLY或者OUTER APPLY就是专门用来处理这种逐行调用表值函数的工具,刚好适配你的情况。

直接上可运行的示例代码,你可以根据实际情况调整:

SELECT 
    a.ID,
    -- 建议替换成函数返回的具体列名(比如Line1、Line2等),避免用*,更安全清晰
    split.Line1,
    split.Line2,
    split.Line3,
    split.Line4
FROM 
    [dbo].[ADDRESS] a
-- 用CROSS APPLY会过滤掉函数返回空结果的行
-- 如果想保留所有原表行(哪怕函数没返回值),就换成OUTER APPLY
CROSS APPLY 
    [dbo].[fn_Split_Address](a.ID, a.ADDRESS_LINE, CHAR(13)) split

关键细节说明:

  • CROSS APPLY:作用类似INNER JOIN,只有当函数为当前行返回有效结果时,才会保留原表的这一行。
  • OUTER APPLY:作用类似LEFT JOIN,不管函数有没有返回结果,原表的所有行都会被保留,函数返回空的字段会显示为NULL。
  • 这里我们把原表的ID作为Address_ID参数,ADDRESS_LINE作为地址字符串参数,CHAR(13)作为分隔符,完全匹配你的函数参数要求。

如果你的函数返回的列名不是Line1-Line4,记得把SELECT里的列名换成实际名称,这样代码可读性和稳定性都会更好。

内容的提问来源于stack exchange,提问作者SQLiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:15:09