我一直试图找出根据文件内容(在我的情况下为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
有更好的方法吗?
答案 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的其他方式