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

如何用SQL Server多输出值函数拆分数据并关联原表ID?

如何实现字符串拆分后与原表关联的结果(解决子查询返回多行报错)

完全可以通过常规查询实现你的需求,不需要额外的存储过程或者修改现有函数,只需要调整查询的关联方式就行。

你之前的报错是因为把返回多行结果的函数放在了子查询表达式中——SQL Server不允许这种场景,因为单个表达式只能返回单个值,而你的dbo.datasplit函数会返回多行,所以触发了Msg 512的错误。

正确的做法是使用CROSS APPLY(或者OUTER APPLY,根据你的空值处理需求)来关联原表和拆分函数的结果,它会自动把原表的每一行和拆分后的多行结果进行匹配,实现“行展开”的效果:

SELECT dt.ID, ds.items AS splitted_data
FROM data_table dt
CROSS APPLY dbo.datasplit(dt.data, ';') ds

执行这个查询后,就能得到你期望的输出:

ID splitted_data
1 a
1 b
1 c
2 d
2 e
2 f
3 j

补充说明:

  • 如果你的data字段可能存在NULL或者空字符串的情况,CROSS APPLY会过滤掉这些原表行;如果想要保留原表的所有行(即使拆分后没有结果),可以换成OUTER APPLY。

内容的提问来源于stack exchange,提问作者david.k.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:19