多少存储过程参数太多了?

Joe*_*eky 12 performance sql-server-2008 database-design optimization

我刚刚开始在 SQL Server 2008 中编写存储过程,并且有 30 多个参数。我从来没有写过一个参数超过 10 个的,这让我开始思考……什么时候参数太多了?

对于背景...这个程序基本上将INSERT单列成一个单一的表。也会有一个非常相似的;虽然有点小;在同一个表上执行UPDATE 的版本。大多数列相对较小,混合了 int 和 string (varchar(200) )。

有哪些问题;是好是坏; 有一个包含大量参数的程序,我应该开始考虑其他模式的阈值是多少?

Mar*_*ith 13

问题?我不会争辩。

  • 限制为 2100 个参数。IIRC 自 SQL2000 以来一直是 2100,但文档错误表明它是 1024。
  • 如果一个表有 1000 列(例如,由于 Sharepoint 式的稀疏列排列)并且您通过存储过程强制访问,则您的插入过程可能有 1000 个参数。没有错。
  • 遇到宽表(不是 30 是特别宽)时,请停下来查看模式。发现开始时生活正常化的桌子并不少见,但由于懒惰和/或鲁莽而扩大到面目全非。
  • 甚至不要简单地考虑将一组参数作为 CSV 列表或 XML 传递。使查询优化器失明,几乎不节省时间或精力。
  • 不要手动启动客户端代码来调用具有大量参数的过程。代码生成工具,如T4 模板CodeSmith来救援。

  • 感谢您的回答,它说得非常好。这完美地回答了我的问题。遗憾的是,他们没有使用像“**无能**”这样伟大的拼字游戏单词的徽章 (2认同)