Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 WHERE in查询中可能的最大值_Sql Server 2008_Sql Delete_Where In - Fatal编程技术网

Sql server 2008 WHERE in查询中可能的最大值

Sql server 2008 WHERE in查询中可能的最大值,sql-server-2008,sql-delete,where-in,Sql Server 2008,Sql Delete,Where In,我有一个超过3000000个条目的表,我需要删除其中500000个具有给定ID的条目。 我的想法是创建如下查询: DELETE FROM TableName WHERE ID IN (id1, id2, ...........) 我用一个简单的C代码生成。 问题是: 我可以在ID数组中设置多少个值有限制吗 如果有人有更好的方法更有效地实现这一目标,我愿意接受各种想法 如果无法通过任何比较确定您的ID(如中的ID

我有一个超过3000000个条目的表,我需要删除其中500000个具有给定ID的条目。 我的想法是创建如下查询:

DELETE FROM TableName WHERE ID IN (id1, id2, ...........)
我用一个简单的C代码生成。 问题是: 我可以在ID数组中设置多少个值有限制吗


如果有人有更好的方法更有效地实现这一目标,我愿意接受各种想法

如果无法通过任何比较确定您的ID(如
中的ID<1000000
),您可以

  • INSERT
    将它们插入到包含多个INSERT的临时表中,然后
  • 将此临时表加入您的临时表
  • 但插入可能会产生问题。你应该检查一下。你怎么能加快速度

  • 将删除分为几个块
  • 将ID插入临时表

  • 最后,我的解决方案效果还不错: 1.对ID进行排序(以保存服务器分页) 2.使用C#代码查询创建,其中包含500个ID。 3.一个接一个地发送查询

    我假设,当我处理具有1000个以上ID的查询时,sql server处理查询的时间会减慢我的速度(在sql server中运行的所有查询都在处理和优化之后)


    我希望这有助于某人

    嗯。。。它没有足够的内存来处理该查询您的C#代码如何确定ID列表?如果它可以在T-SQL中指定为where/having子句和/或子查询的组合,则可能是更好的方法。C代码的可能副本是从数据源(XML文件)提取id,所有有条件的人。如果你只是删除所有小于1000000的ID,我不明白你为什么要引入临时表。所以我认为它不应该是ID列表,而是ID范围列表。@Martin:我说的是当ID不能通过简单的比较来确定时。。。“不行!”罗伯特——你也是!我错了!我真的看不出添加临时表将如何改善所需的时间。。。。正在创建临时表/连接现有表/然后删除。。。。。虽然我一直有一个要删除的ID列表(主键)