方法删除重复记录的共享SQLServer2008
现在让我们看看如何在SQL Server 2008中删除这些记录。首先,您可以模拟几个简单的副本:复制代码代码如下所示:
创建表(dbo.employee
{ int主键,
{姓名} varchar(50),
{整数},
{位缺省值为1
)
插入员工({id},{姓名},{年龄},{性})值(1,詹姆斯,25,默认)
插入员工({id},{姓名},{年龄},{性})值(2,詹姆斯,25,默认)
插入员工({id},{姓名},{年龄},{性})值(3,詹姆斯,25,默认)
插入员工({id},{姓名},{年龄},{性})值(4,'lisa,24,0)
插入员工({id},{姓名},{年龄},{性})值(5,'lisa,24,0)
插入员工({id},{姓名},{年龄},{性})值(6,'lisa,24,0)
插入员工({id},{姓名},{年龄},{性})值(7,'mirsa,23,0)
插入员工({id},{姓名},{年龄},{性})值(8,'mirsa,23,0)
插入员工({id},{姓名},{年龄},{性})值(9,'mirsa,23,0)
插入员工({id},{姓名},{年龄},{性})值(10,约翰,26,默认)
插入员工({id},{姓名},{年龄},{性})值(11,'abraham ',28,默认)
插入员工({id},{姓名},{年龄},{性})值(12,'lincoln ',30,默认)
好的,首先,我们使用最常用的方法:
员工在名称中删除(选择从员工组的名字);
然后用rownumber():
删除从(选择row_number()在(分区{名称}顺序(选择0))。
还可以使用CTE(公共表表达式):复制代码如下所示:
作为与DUPS
(
选择row_number()在(分区{名称}顺序(选择0))为RN
从员工
)
删除从DUPS
RN>1;
添加秩()()CTE:
复制代码代码如下所示:
作为与DUPS
(
选择{ }、{ }、{ }、{ }
row_number()在(分区{名称}顺序(选择0))为RN
等级()在(分区{名称}顺序(选择0))为RNK
从员工
)
删除从DUPS
在RN <> RNK;
以下是四个T-SQL查询的执行计划:
你可以看到,不使用CTE最昂贵的方法,主要是在表的阀芯,其中的成本是44%,和表为物理运算符。表Spool运算符扫描输入,每行一份隐藏的假脱机表,这是存储在tempdb数据库和只存在于查询的寿命。如果经营者重绕(例如通过嵌套循环操作,而不需要任何卷)重新绑定,您将使用假脱机数据,而不必扫描输入。
请注意,如果重复记录,上述方法在相对较少的情况下是重复记录。删除将非常慢,最好的方法是将数据复制到一个新表中,删除表,为原始表重新命名新表。或者使用临时表,也可以减少事务日志数据库。看看下面的T-SQL:
复制代码代码如下所示:
作为与DUPS
(
选择{ }、{ }、{ }、{ }
row_number()在(分区的{id}顺序(选择0))为RN
从员工
)
选择{ }、{ }、{ }、{ }
为dbo.employeedupstmp
从DUPS
其中RN=1
DROP TABLE dbo.员工;
执行sp_rename'dbo employeedupstmp ','employee。
我希望这篇文章有助于你的发展。作者:Petter Liu