我正在尝试编写一个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重复数字?或者是否有更有效的方式。请指点我的方向。
答案 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