为啥这不起作用:使用 "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”附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章