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

INSERT SQL语句使用With ROW_NUMBER时报With附近语法错误如何解决?

问题原因
  • 批处理语句终止符缺失:SQL Server规定,若WITH关键字不是当前批处理的首个语句,其前面必须添加分号;作为前序语句的终止标识。你代码中WITH紧跟在INSERT语句之后,没有添加前导分号,直接触发了「关键字 'With' 附近有语法错误」的报错。
  • 潜在命名冲突(非直接报错原因,建议优化):你将CTE的名称设置为Row_Number,和SQL内置窗口函数ROW_NUMBER()重名,后续逻辑扩展或维护时极易引发不必要的命名冲突。
修正后代码
IF OBJECT_ID ('tempdb..#Assignments') IS NOT NULL 
   DROP TABLE #Assignments
CREATE TABLE #Assignments
(
SerialNumber VARCHAR(24) NOT NULL
)
INSERT INTO #Assignments (SerialNumber)
    ;WITH SerialDuplicates AS 
        (
        SELECT SerialNumber, ROW_NUMBER() 
        OVER (PARTITION BY serialNumber ORDER BY serialnumber) AS Row_Num
        FROM Monitor  
        WHERE SerialNumber IS NOT NULL
        ) 
    SELECT SerialNumber FROM SerialDuplicates WHERE Row_Num > 1
可选优化方案

如果你只是需要提取Monitor表中出现过至少2次的SerialNumber存入临时表,可以用更简洁的GROUP BY写法,无需使用CTE:

IF OBJECT_ID ('tempdb..#Assignments') IS NOT NULL 
   DROP TABLE #Assignments
CREATE TABLE #Assignments
(
SerialNumber VARCHAR(24) NOT NULL
)
INSERT INTO #Assignments (SerialNumber)
SELECT SerialNumber 
FROM Monitor 
WHERE SerialNumber IS NOT NULL
GROUP BY SerialNumber
HAVING COUNT(*) > 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:24:00