用于批量删除的SQL脚本

时间:2017-09-12 14:26:58

标签: sql sql-server-2008

我正在尝试编写一个SQL脚本,使用文本文件的输入批量删除表中的行。我刚刚进入SQL Scripting。

Backstory:我以前的角色中的某个人设置了一个没有主键的表,并且一个程序被设计为将数据插入表中。但是,程序永远不会先检查重复的条目,只是继续进行插入。

我正在尝试清理数据库。

首先,我运行了一个查询,以查看重复的行数。因此大约有大约7,000个,我不可能一次删除一个查询。 [ID]应该已设置为主键。

查询以确定重复

SELECT [ID] FROM [testing].[dbo].[testingtable]
GROUP BY [ID]
HAVING COUNT(*) > 1

我可以通过对单个ID使用以下查询来删除重复的行:

SET ROWCOUNT 1
DELETE FROM [testing].[dbo].[testingtable]
WHERE [ID] = SomeNumber
SET ROWCOUNT 0

我有一个包含所有重复ID号条目的文本文件,但是,是否有我可以创建的批量删除脚本,以便我可以从文本文件中提供所有ID重复数字?或者是否有更有效的方式。请指点我的方向。

2 个答案:

答案 0 :(得分:0)

如果你想删除很高比例的行...

SELECT col1, col2, ... 
INTO #Holdingtable
FROM MyTable 
WHERE ..opposite condition..

TRUNCATE TABLE MyTable

INSERT MyTable (col1, col2, ...)
SELECT col1, col2, ... 
FROM #Holdingtable

答案 1 :(得分:0)

我不明白您为什么(或需要)所有重复ID的文本文件。

因此大约有7,000个,我不可能一次删除一个查询
当然有一种方法可以删除它们,我们在这里:

如果您只想从表中删除重复项,请使用以下代码:

WITH CTE AS(
   SELECT [ID]
         ,RN = ROW_NUMBER()OVER(PARTITION BY [ID])
   FROM [testing].[dbo].[testingtable]
)
DELETE FROM CTE WHERE RN > 1