数据完整性:删除 SQL Server 中的重复条目
维护干净高效的数据库需要定期删除重复记录。 这对于数据完整性和最佳数据库性能至关重要。 当存在相同条目时(例如,多名员工同名),消除冗余至关重要。
SQL Server 使用窗口函数和 DELETE 语句提供了强大的解决方案。 窗口函数提供了跨相关行执行计算的能力。
为了说明这一点,让我们考虑根据 EmployeeName
列删除重复条目。 ROW_NUMBER()
函数为分区内的每一行(一组相同的 EmployeeName
值)分配唯一的排名。 这使我们能够有选择地删除重复项。
这是 T-SQL 查询:
<code class="language-sql">DELETE x FROM ( SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY EmployeeName ORDER BY empId) FROM Employee ) x WHERE RN > 1;</code>
此查询的功能如下:子查询创建一个临时表,应用按 ROW_NUMBER()
分区的 EmployeeName
并按 empId
排序。这会为每个员工姓名分配一个唯一的排名 (RN),并按顺序对重复项进行编号。
然后,DELETE
语句以该临时表(别名为“x”)为目标,并删除 RN 大于 1 的所有行。这实际上仅保留每个 EmployeeName
的第一个实例,删除所有后续重复项。
执行前验证:
在执行DELETE
语句之前,验证其影响至关重要。 运行此 SELECT
语句:
<code class="language-sql">SELECT * FROM ( SELECT *, RN = ROW_NUMBER() OVER (PARTITION BY EmployeeName ORDER BY empId) FROM Employee ) x WHERE RN > 1;</code>
这将预览要删除的记录。 确认准确性后,执行 DELETE
语句以从 Employee
表中永久删除重复记录。
以上是如何使用 ROW_NUMBER() 删除 SQL Server 中的重复记录?的详细内容。更多信息请关注PHP中文网其他相关文章!