我读到here,可以传递给存储过程的最大参数数量是2100.
我只是好奇什么样的系统需要传递2100参数的SP,并且不能将它分成多个SP?
我认为可能是一个调用多个SP的SP需要传递大量的参数,我只是无法理解那个恶心的EXEC
语句。
答案 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,但肯定是长列表有用的情况......