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

SQL Server单表查询当前版本关联的所有历史版本

在SQL Server中查询文档的所有前置历史版本

可以使用**递归公共表表达式(CTE)**实现单个SELECT查询,获取指定版本的所有前置历史版本,以下是具体实现方案:

假设你的表名为Documents(如果表名不同,请自行替换),执行以下SQL即可获取Test1 Version C的所有前置版本:

WITH DocumentVersions AS (
    -- 锚点:定位目标版本(Test1 Version C)
    SELECT ID, NAME, VERSION, VERSION_ID
    FROM Documents
    WHERE NAME = 'Test1' AND VERSION = 'C'
    UNION ALL
    -- 递归:逐级向上关联父版本
    SELECT d.ID, d.NAME, d.VERSION, d.VERSION_ID
    FROM Documents d
    INNER JOIN DocumentVersions dv ON d.ID = dv.VERSION_ID
)
-- 排除目标版本本身,返回所有前置历史版本
SELECT ID, NAME, VERSION
FROM DocumentVersions
WHERE ID != (SELECT ID FROM Documents WHERE NAME = 'Test1' AND VERSION = 'C')
-- 若版本层级超过100,取消递归深度限制
OPTION (MAXRECURSION 0);

代码说明:

  • 锚点成员:精准定位到你需要查询的目标版本,作为递归的起始点。
  • 递归成员:通过VERSION_ID与原表的ID关联,循环获取上一版本的记录,直到没有父版本(VERSION_ID为NULL)为止。
  • 最终查询:排除目标版本本身,仅返回所有前置历史版本;OPTION (MAXRECURSION 0)用于取消SQL Server默认的100层递归限制,适用于版本层级较多的场景。

执行上述SQL后,将返回你期望的结果:

IDNAMEVERSION
1Test1A
2Test1B

如果需要查询其他文档或版本,只需修改锚点成员中的WHERE条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:05:25