我想删除表中的重复记录所以我使用了CTE选项但是我收到以下错误消息。会是什么原因?我做错了吗?最多选择声明它可以工作。
with Empcte as (
select *
, ROW_NUMBER() over (partition by ID ORDER BY ID) as RowNumber
from Empgender
)
SELECT *
FROM Empcte
delete from Empcte
where RowNumber > 1
Msg 208,Level 16,State 1,Line 8 无效的对象名称' Empcte'
答案 0 :(得分:2)
您不能对两个不同的陈述使用相同的CTE。 (在这种情况下,首先是SELECT,然后是DELETE)您必须为DELETE重新创建CTE,或者使用临时表或表变量而不是CTE。
答案 1 :(得分:0)
CTE
是一次性视图。它仅持续一个语句,然后自动消失。您可以避免使用SELECT
语句:
WITH Empcte as (
SELECT id
,Count() as Rowcount
FROM Empgender
Group by id)
DELETE from Empgender where
Exists ( select 1 from Empgender as eg where Empcte.id = eg.id and Empcte.Rowcount >1 and );