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

如何验证按行序列执行的数据迁移结果?CASE语句尝试未生效

校验查询实现

你可以通过窗口函数先按迁移规则计算出每个req_id对应的预期ncv1、ncv2值,再和已填充的字段值比对,即可完成校验,参考查询语句如下:

WITH req_map_sorted AS (
    -- 按seq升序排列每个req_id的关联映射数据
    SELECT 
        req_id,
        nach_id,
        seq
    FROM dbo.req_map
    ORDER BY req_id, seq ASC
),
expected_ncv1 AS (
    -- 取每个req_id第一个nach_id作为预期ncv1
    SELECT DISTINCT
        req_id,
        FIRST_VALUE(nach_id) OVER (PARTITION BY req_id ORDER BY seq ASC) AS expected_ncv1
    FROM req_map_sorted
),
expected_ncv2 AS (
    -- 筛选出所有和ncv1不同的nach_id,取第一个作为预期ncv2
    SELECT DISTINCT
        s.req_id,
        FIRST_VALUE(s.nach_id) OVER (PARTITION BY s.req_id ORDER BY s.seq ASC) AS expected_ncv2
    FROM req_map_sorted s
    JOIN expected_ncv1 e1 ON s.req_id = e1.req_id
    WHERE s.nach_id != e1.expected_ncv1
)
-- 关联比对结果
SELECT 
    cr.req_id,
    cr.ncv1,
    e1.expected_ncv1,
    cr.ncv2,
    ISNULL(e2.expected_ncv2, NULL) AS expected_ncv2,
    CASE 
        WHEN cr.ncv1 = e1.expected_ncv1 AND ISNULL(cr.ncv2, -999) = ISNULL(e2.expected_ncv2, -999) THEN '校验通过'
        ELSE '校验失败'
    END AS 校验结果
FROM dbo.req cr
JOIN expected_ncv1 e1 ON cr.req_id = e1.req_id
LEFT JOIN expected_ncv2 e2 ON cr.req_id = e2.req_id

注意事项

你原查询中cr.ncv2 = null的写法是错误的,SQL中判断空值需要用IS NULL,= NULL永远返回未知结果,会导致判断逻辑失效。
按你提供的示例数据运行上述查询,会得到两个req_id的校验结果均为通过,符合迁移规则要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:30:04