如果SQL Server版本是2005或更高版本,您可以尝试以下内容.
WITH cte AS
(
SELECT {list-of-columns-in-table},
row_number() over (PARTITION BY {list-of-key-columns} ORDER BY {rule-to-determine-row-to-keep}) as sequence
FROM myTable
)
DELETE FROM cte
WHERE sequence > 1
Run Code Online (Sandbox Code Playgroud)
这使用公用表表达式(CTE)并添加序列列.{list-of-columns-in-table}就像它所说的那样.并非所有列都是必需的,但我不会在此解释.
{list-of-key-columns]是用于定义重复内容的列.
{rule-to-determination-row-to-keep}是一个序列,因此第一行是要保留的行.例如,如果要保留最旧的行,则可以使用日期列作为序列.
这是使用真实列的查询示例.
WITH cte AS
(
SELECT ID, CourseName, DateAdded,
row_number() over (PARTITION BY CourseName ORDER BY DateAdded) as sequence
FROM Courses
)
DELETE FROM cte
WHERE sequence > 1
Run Code Online (Sandbox Code Playgroud)
此示例根据CoursName值删除重复的行,并将最旧的行保留在DateAdded值上.