T-SQL中CTE表自调用计算技术对应的专业术语是什么?
递归公用表表达式(Recursive CTE)
嗨,你提到的这种让CTE自调用、逐步迭代处理数据直到完成目标的技术,在T-SQL里正式叫做递归公用表表达式(Recursive CTE)。
它的核心结构分为两部分:
- 锚点成员:这是CTE的初始数据集,也就是第一次运行时返回的基础结果,比如你例子里原始的带逗号分隔列表的记录。
- 递归成员:这部分会引用CTE自身,基于上一次迭代的结果继续处理(比如拆分出一个子字符串,生成新的记录),直到没有符合条件的行可以返回时,递归就会停止。
举个贴合你场景的简单逻辑示例:
WITH tmp AS ( -- 锚点成员:初始数据 SELECT ID, LEFT(CommaList, CHARINDEX(',', CommaList + ',') - 1) AS Item, STUFF(CommaList, 1, CHARINDEX(',', CommaList + ','), '') AS RemainingList FROM YourTable WHERE CommaList IS NOT NULL AND CommaList <> '' UNION ALL -- 递归成员:自调用CTE,处理剩余的字符串 SELECT ID, LEFT(RemainingList, CHARINDEX(',', RemainingList + ',') - 1) AS Item, STUFF(RemainingList, 1, CHARINDEX(',', RemainingList + ','), '') AS RemainingList FROM tmp WHERE RemainingList IS NOT NULL AND RemainingList <> '' ) SELECT ID, Item FROM tmp;
这里的递归成员每次都会从tmp的上一轮结果里拿未处理完的RemainingList,继续拆分出单个元素,直到RemainingList为空,递归就自动终止了——这就是你观察到的“自行运行直至所有子字符串都加载到新记录中”的机制。
内容的提问来源于stack exchange,提问作者LUSAQX
相关产品推荐
相关产品推荐

