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

SQL Server中无唯一标识符的两个表如何对比及WITH语法错误解决

SQL Server无唯一标识同结构表对比问题修复

报错原因

你的代码存在3处语法错误,直接触发了WITH关键字附近的语法报错:

  • 多CTE语法不符合规范:SQL Server定义多个公共表表达式时,仅第一个CTE需要加WITH关键字,后续CTE用逗号分隔即可,无需重复声明WITH
  • 列之间缺少分隔符:SELECT和ORDER BY子句中的Customer、Account、address三个列没有用逗号分隔,如果你的列名实际包含空格,还需要用方括号[]包裹列名
  • 表名拼写错误:关联时写的traget为拼写错误,正确表名是你定义的target

修正后的代码

WITH source AS  
(  
     SELECT 
         ROW_NUMBER() OVER(ORDER BY Customer, Account, address) AS RowN,   
         Customer, Account, address
     FROM 
         old
),
target AS  
(  
     SELECT 
         ROW_NUMBER() OVER(ORDER BY Customer, Account, address) AS RowN,   
         Customer, Account, address
     FROM 
         New
)  

SELECT 
    s.address AS s_address, t.address AS t_address
FROM
    source s
JOIN
    target t ON s.RowN = t.RowN
WHERE
    s.Customer != t.Customer
    OR s.Account != t.Account
    OR s.address != t.address

优化建议

  • 使用行号对比的前提是两个表的ORDER BY排序逻辑完全一致,确保相同业务含义的行能匹配到同一个RowN值
  • 如果两个表可能存在行数不一致的情况,建议将JOIN改为FULL OUTER JOIN,可以同时匹配出仅存在于old表或仅存在于New表的行,避免遗漏差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:03