【问题标题】:SQL Bulk Deletions from File从文件中批量删除 SQL
【发布时间】:2016-08-10 15:08:23
【问题描述】:

我一直在尝试找出基于文件内容(在我的情况下为 CSV)从表中删除多行的最佳方法,尽管我对可能的最佳做法有困难。我正在创建的 CSV 将包含要从主表中删除的键。

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

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

有没有更好的方法来做到这一点?

【问题讨论】:

标签: sql sql-server tsql csv


【解决方案1】:

为什么不简单地这样:

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

【讨论】:

  • 可能是因为我主要是过度思考这个问题,天哪。谢谢!符合条件时将接受。
【解决方案2】:
;WITH CTE AS (SELECT T.* FROM TEST T WHERE T.KEY1 IN 
               (SELECT KEY FROM TestTemp))
 DELETE CTE;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2019-02-10
    • 2013-02-17
    • 1970-01-01
    • 2021-03-07
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多