为啥这不起作用:使用 "With ROW_NUMBER" 插入 SQL 语句。错误是关键字“With”附近的语法不正确

Posted

技术标签:

【中文标题】为啥这不起作用:使用 "With ROW_NUMBER" 插入 SQL 语句。错误是关键字“With”附近的语法不正确【英文标题】:Why does this not work: INSERT SQL statement using "With ROW_NUMBER" . Error is Incorrect syntax near the keyword 'With'为什么这不起作用:使用 "With ROW_NUMBER" 插入 SQL 语句。错误是关键字“With”附近的语法不正确 【发布时间】:2021-12-04 00:21:54 【问题描述】:

我正在使用这种单独在组件中工作的语法,但是当我将它们全部一起使用时,它停止工作我得到一个语法错误:关键字“With”附近的语法不正确。我不知道为什么。

if OBJECT_ID ('tempdb..#Assignments') is not null 
   drop table #Assignments
create table #Assignments
(
SerialNumber varchar(24) not null
)
insert into #Assignments (SerialNumber)
    With Row_Number 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 Row_Number where Row_Num > 1

【问题讨论】:

看一下文档,它包括一个example关于如何执行DML操作;你会很快注意到你的错误。 旁注:按相同值进行分区和排序将是不确定的,如果您这样做order by (select null),您的意图会更清晰 【参考方案1】:

这不是有效的语法。当您使用 CTE 时,WITH 是语句的第一部分。

if OBJECT_ID ('tempdb..#Assignments') is not null 
    drop table #Assignments;
create table #Assignments
(
    SerialNumber varchar(24) not null
);

    With Row_Number as 
        (
            select SerialNumber,row_number() over (partition by serialNumber order by serialnumber) as Row_Num
            from Monitor  
            where SerialNumber IS NOT NULL
        ) 
    insert into #Assignments (SerialNumber)
    select SerialNumber from Row_Number where Row_Num > 1;

附注:当您使用 CTE 时,请确保在您的陈述之后包含 ;WITH 之前的语句必须终止,否则会出现语法错误。

【讨论】:

谢谢@squillman。我现在看到了。

以上是关于为啥这不起作用:使用 "With ROW_NUMBER" 插入 SQL 语句。错误是关键字“With”附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

为啥这不起作用?爪哇

通过模板的 C++ 混合:为啥这不起作用?

为啥这不起作用? [姜戈]

Windows 上的 Python 管道:为啥这不起作用?

如何做一个简单的缩放动画,为啥这不起作用?

为啥这不起作用? ORA-00979: 不是 GROUP BY 表达式