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

SQL Server多版本表记录差异对比SQL脚本开发需求

SQL Server 同维度版本差异对比脚本

以下是满足需求的SQL脚本,可针对同一ParentItem+ChildItem组合下的版本0(旧版)和版本1(新版)记录,对比Color、PG#列的差异,并输出指定格式结果:

WITH VersionPairs AS (
    -- 关联同维度下的版本0和版本1记录
    SELECT
        t1.ParentItem,
        t1.ChildItem,
        t1.Version,
        t0.Color AS Old_Color,
        t1.Color AS New_Color,
        t0.[PG#] AS Old_PG,
        t1.[PG#] AS New_PG
    FROM YourTable t0
    INNER JOIN YourTable t1
        ON t0.ParentItem = t1.ParentItem
        AND t0.ChildItem = t1.ChildItem
        AND t0.Version = 0
        AND t1.Version = 1
)
-- 列转行并处理差异展示逻辑
SELECT
    ParentItem,
    ChildItem,
    Version,
    ColumnName,
    CASE WHEN Old_Value = New_Value THEN NULL ELSE Old_Value END AS OldValue,
    CASE WHEN Old_Value = New_Value THEN NULL ELSE New_Value END AS NewValue
FROM VersionPairs
CROSS APPLY (
    -- 将需要对比的列拆分为行记录
    VALUES
        ('Color', CAST(Old_Color AS VARCHAR(MAX)), CAST(New_Color AS VARCHAR(MAX))),
        ('PG#', CAST(Old_PG AS VARCHAR(MAX)), CAST(New_PG AS VARCHAR(MAX)))
) AS Unpivoted(ColumnName, Old_Value, New_Value);

逻辑说明

  1. CTE VersionPairs:通过ParentItem和ChildItem关联旧版(Version=0)和新版(Version=1)的记录,提取出目标列的新旧值。
  2. CROSS APPLY + VALUES:将列数据转换为行数据,让每一列的对比结果单独成为一行,匹配期望的输出结构。
  3. 差异判断:用CASE语句判断新旧值是否一致,一致时将OldValue和NewValue设为NULL,不一致则保留对应值。
  4. 类型统一:通过CAST将不同数据类型的列(如数值型的PG#、字符串型的Color)统一转换为字符串,确保输出列类型一致。

使用注意

  • 替换脚本中的YourTable为实际数据表名。
  • 若需扩展对比更多列,只需在CROSS APPLY的VALUES块中添加新行,格式为('列名', 旧值列, 新值列)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:41:11