with cte as (select id,rn2=Row_number() over(partition by id order by id) from dbo.ab1 ) delete from dbo.ab1 where rn2>1;

with cte as (select id,rn2=Row_number() over(partition by id order by id) from dbo.ab1 ) delete from dbo.ab1 where rn2>1;

以上查询抛出无效的列名 'rn2'。 SQL 服务器出错。任何人都可以帮我解决这个问题。我需要从没有主键的 table 中删除整个重复记录。

with cte as (
    select id,rn2=Row_number() over(partition by id order by id) 
    from dbo.ab1 
) delete from cte where rn2>1;

这是有效的。只需在删除语句中用 cte 更改 table 名称即可。