我需要从sql server 2008数据库中删除很多行,它必须是可伸缩的,所以我在考虑批量删除,问题是对此的引用不多,至少在我的情况下。
第一个因素是我将确切地知道要删除的每一行的ID,因此任何有TOP的提示都不是一个选项,我也会删除我想要保留的较少的行,因此不需要一些“ drop / temp table /重新创建“方法。
所以我想使用WHERE IN,要么使用ID提供ID或xml数据,还有一个选项可以使用MERGE删除行。
如果我必须删除1000多行,将所有ID发送到WHERE IN可能会有问题吗?有什么用MERGE - 它真的可以解决所有批量插入/更新/删除问题?选择什么?
答案 0 :(得分:2)
一种选择是将已知ID存储到“控制器”表中,然后从主数据表中删除其ID显示在控制器表中的行。
这样,您可以轻松地“批量”删除,例如
DELETE FROM dbo.YourMainDataTable
WHERE ID IN (SELECT TOP (250) ID FROM dbo.DeleteControllerTable)
您可以轻松地在此处运行此删除语句。一个SQL代理作业,每隔15分钟就会检查一次是否有任何要删除的内容。在此期间,您可以向DeleteController
表添加更多ID,这样您就可以“解耦”输入要从实际删除过程中删除的ID的过程。