SQL Max参数

时间:2010-07-01 19:19:01

标签: sql sql-server parameters

我读到here,可以传递给存储过程的最大参数数量是2100.

我只是好奇什么样的系统需要传递2100参数的SP,并且不能将它分成多个SP?

我认为可能是一个调用多个SP的SP需要传递大量的参数,我只是无法理解那个恶心的EXEC语句。

3 个答案:

答案 0 :(得分:10)

过程参数的限制早于XML数据类型和表值参数,所以在那些日子里根本没有其他选择。在程序上有2100个参数并不一定意味着人类写了它,也不一定意味着人类会称它。在生成的代码(例如由工具和框架创建的代码)中推动任何语言的边界是很常见的,因为生成的代码的维护和重构发生在生成工具中,而不是结果中代码。

答案 1 :(得分:5)

如果您有使用2100参数的存储过程,则很可能存在某种设计问题。

在单个参数中传递CSV值列表(并使用表值拆分函数将这些值转换为行),或者使用表值参数将比处理所有这些输入参数容易得多。

答案 2 :(得分:4)

我有一种情况,我必须运行类似以下的东西:

SELECT 
  ...
WHERE
  ID IN (?,?,?,?...)

参数列表包含用户有权在系统中使用的所有实体(它由一些底层框架动态生成)。事实证明,SGBD对这样传递的参数数量有限制,并且它低于2100(IIRC,它是Oracle,最大值是IN列表中的999个参数)。

这是一个很长的参数列表的一个很好的例子,它必须是一个存储过程(我们有超过999和少于2100个参数传递)。

不知道999约束是否适用于sql server,但肯定是长列表有用的情况......