从文件中删除SQL批量

时间:2016-08-10 15:08:23

标签: sql sql-server tsql csv

我一直试图找出根据文件内容(在我的情况下为CSV)从表格中删除多行的最佳方法,尽管我对可能的内容有困难是最好的做法。 CSV i' m创建将包含要从主表中删除的键。

我想出了将这些密钥插入临时表,然后在该数据集上运行光标以从主表中删除每条记录的想法。我只是担心这比其他一些我错过的事情做得慢得多。我的光标在下面:

DECLARE @keyTemp char(10)

DECLARE cursorName CURSOR
LOCAL SCROLL STATIC
FOR 
SELECT * FROM TestTemp
OPEN cursorName
FETCH NEXT FROM cursorName
    INTO @keyTemp
WHILE @@FETCH_STATUS = 0
BEGIN
    DELETE FROM Test WHERE Key1 = @keyTemp
    FETCH NEXT FROM cursorName
    INTO @keyTemp
END
CLOSE cursorName
DEALLOCATE cursorName

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

为什么不这样简单:

DELETE FROM Test
WHERE EXISTS (
                 SELECT    NULL
                 FROM      TestTemp TT
                 WHERE     TT.KeyTemp = Test.Key1
             )

答案 1 :(得分:0)

;WITH CTE AS (SELECT T.* FROM TEST T WHERE T.KEY1 IN 
               (SELECT KEY FROM TestTemp))
 DELETE CTE;

或从TestTemp的内容构建CTE的其他方式