执行"对象无效时给我错误"

时间:2017-06-30 18:45:33

标签: sql-server

我想删除表中的重复记录所以我使用了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'

2 个答案:

答案 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 );