SQL语句删除整个表

时间:2011-12-23 02:00:08

标签: sql sql-server-ce sql-delete bulk

我有两个表都有一个ID号,它们被链接在一起(AllUsersAllProfiles)。当用户按下按钮时,我希望AllUsers表检查AllProfiles表中不存在的ID并删除它们。我是SQLCE的新手并且一起攻击了这个。问题是,它不断删除整个表。为什么呢?

DELETE FROM AllUsers
WHERE  EXISTS
    (SELECT       ID
     FROM         AllUsers
     WHERE        (ID NOT IN
                     (SELECT ID
                        FROM AllProfiles)))

此外,这是批量删除数千条记录的有效方法吗?我尝试了Linq的DeleteAllOnSubmit,但它太慢了。我希望由于以上是直接比较两个表,它应该是有效的。 (我不想使用级联,因为我需要单独控制每个表)

编辑 - SELECT语句正确返回缺少的ID,因此DELETE FROM AllUsers WHERE EXISTS部分出现问题。

1 个答案:

答案 0 :(得分:1)

你基本上是在说

delete from allusers
where TRUE -- this is pseudo, but you get the idea

您的原始查询会删除整个表,因为唯一的条件是布尔值...如果返回数据,那么它将删除所有数据。如果您的exists子句不返回数据,则不会删除任何数据。

你想要这样的东西(我不熟悉CE,但如果不能100%转移到CE,你应该能够做一个小修改):

delete from allusers
where id not in
(
    select id
    from allprofiles
)