“IN”条款中有多少项是可行的?

时间:2014-08-06 05:26:47

标签: sql sql-server

我们已经安装了一些数据库监控软件。其中一个sql语句使我们的系统停止运行如下:

update StockItems set WebTransfer='N'
where stockcode in ('1001','1002','1003',......)
上面的

where "......"代表2496个其他股票代码!即总共列出了2499股票代码。

这是我们的软件供应商给我们的解决方案。

我感到惊讶的是它导致SQL引擎出血,在我看来它应该加入另一个表来获取要更新的代码列表,或者只是继续更新所有他们(我认为在这种情况下会没问题)。

虽然我知道我从来没有写过这样的SQL,而且我从来没有见过类似的东西,但我不确定哪种约定/标准会支持我的观点#39 ;不是一个好的解决方案。

任何人都可以提供有关返回供应商的建议吗?

2 个答案:

答案 0 :(得分:4)

maximum size is about 10k values in the IN clause.。您可以更好地使用一些临时表,然后使用JOINS来获取数据

您还可以检查报告的类似问题here

答案 1 :(得分:0)

在我看来最好使用不同的表来存储所有ID并使用JOINS来更新表。

或者您可以像这样使用INNER QUERY

update StockItems set WebTransfer='N'
where stockcode in (Select * from Temp where ID>=1001 && ID<=END);