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

如何获取SQL参数表中多层嵌套引用参数的最终实际值

嵌套参数引用展开解决方案

这类场景的标准名称一般为 嵌套参数引用解析 或 变量依赖链展开,是参数配置表的常见需求,递归CTE完全可以实现该需求,以下是适配你测试用例的实现方案:

实现代码

DECLARE @T TABLE
    (   ParameterName NVARCHAR(128) NULL,
        ParameterValue NVARCHAR(128) NULL
    )

INSERT @T
VALUES  (   '$A', 'SOME VALUE'),
        (   '$B', '$A'),
        -- 可自行添加多层嵌套测试用例验证
        (   '$C', '$B'),
        (   '$D', '$C + EXTRA STRING')

;WITH RecursiveCTE AS
(
    -- 锚点:读取所有参数初始值,记录递归深度避免环形引用死循环
    SELECT 
        ParameterName,
        ParameterValue AS FinalValue,
        0 AS RecursionLevel
    FROM @T
    UNION ALL
    -- 递归:替换当前值中存在的参数引用
    SELECT
        r.ParameterName,
        CAST(REPLACE(r.FinalValue, t.ParameterName, t.ParameterValue) AS NVARCHAR(128)),
        r.RecursionLevel + 1
    FROM RecursiveCTE r
    INNER JOIN @T t 
        ON r.FinalValue LIKE N'%' + t.ParameterName + N'%'
    -- 可根据实际业务的最大嵌套层级调整深度限制
    WHERE r.RecursionLevel < 10
)
-- 取每个参数完全展开后的最终结果
SELECT DISTINCT
    ParameterName,
    LAST_VALUE(FinalValue) OVER (
        PARTITION BY ParameterName 
        ORDER BY RecursionLevel 
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
    ) AS FinalValue
FROM RecursiveCTE
ORDER BY ParameterName

代码说明

  • 锚点成员读取所有参数的初始值,同时记录递归层数,避免出现$A引用$B、$B又引用$A的环形引用导致死循环
  • 递归成员每次匹配当前值中存在的参数名,替换为对应的参数值,直到没有可替换的引用为止
  • 最终用窗口函数取每个参数递归到最深层的结果,就是完全展开后的最终值

运行结果(针对你给出的基础测试用例)

ParameterNameFinalValue
$ASOME VALUE
$BSOME VALUE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:15:02