2017-09-12 84 views
0

我正在嘗試編寫一個SQL腳本來批量刪除表格中來自文本文件的輸入中的行。我只是進入SQL腳本。用於批量刪除的SQL腳本

背景故事:有人在我以往的角色設置爲無主鍵和節目表的目的是將數據插入到表中。但是,該程序不會首先檢查重複條目,然後繼續執行插入操作。

我試圖清理數據庫。

首先,我已經運行一個查詢,看看行有多少是重複的。因此,大約有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

...

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

TRUNCATE TABLE MyTable 

INSERT MyTable (col1, col2, ...) 
SELECT col1, col2, ... 
FROM #Holdingtable 
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