1

我需要从 sql server 2008 数据库中删除很多行,它必须是可扩展的,所以我在考虑批量删除,问题是这方面的引用并不多,至少在我的情况下。

第一个因素是我将确切知道要删除的每一行的 ID,因此任何带有 TOP 的提示都不是一个选项,而且我将删除我想要保留的较少行,因此不需要一些“drop/temp”表/重新创建”方法。

所以我在考虑使用 WHERE IN ,无论是提供 ID 还是带有 ID 的 xml 数据,还有一个选项可以使用 MERGE 删除行。

如果我必须删除 1000 多行,将所有 id 发送到 WHERE IN 可能有问题吗?而 MERGE 呢?它真的可以解决所有批量插入/更新/删除问题吗?选择什么?

4

1 回答 1

2

一种选择是将已知 ID 存储到“控制器”表中,然后从主数据表中删除其 ID 显示在控制器表中的行。

这样,您可以轻松地“批量”删除,例如

DELETE FROM dbo.YourMainDataTable
WHERE ID IN (SELECT TOP (250) ID FROM dbo.DeleteControllerTable)

您可以轻松地在例如每 15 分钟出现一次的 SQL 代理作业中运行此删除语句,以检查是否有任何要删除的内容。同时,您可以将更多 ID 添加到您的DeleteController表中,因此您可以将输入要删除的 ID 的过程与实际删除过程“分离”。

于 2010-10-02T16:03:37.913 回答