如何从代码中将大量参数(例如20+)传递给存储过程?
就像我们可以将一个类对象中的所有参数分组然后传递给它,但是如何在存储过程的情况下实现这一点。
目前我必须创建20多个变量来传递参数。
由于 Ashwani
答案 0 :(得分:4)
首先,看一下需要这么多参数的设计 - 有没有办法减少向服务器发送这么多信息的需要?
其次,再次回到第一点,因为它仍然“闻到”错误: - )
然后你可以做以下事情:
拆分存储过程。如果您不必将所有数据作为单个相关的块传递,那么您可以将一个SP拆分为多个执行整个操作的不同部分的SP(例如,将用户名和地址详细信息与添加其最新购买分开更新,
组合参数。如果您有五个指示各种选项的布尔值,那么您可以将它们组合成一个带有按位运算的“flags”字节。或者,如果您有两个32位整数只能保持0..5,000之间的值,那么它们可以合并为一个32位整数。等
将所有参数序列化为“文件格式”,并将数据作为单个二进制文件或文本参数发送,您可以在存储过程中对其进行反序列化。
当然,这些方法意味着每次编码和解码许多参数,这可能比分别传递它们更糟糕。实际上,有人可能会争辩说SQL调用机制已经在为你做上述事了。
答案 1 :(得分:3)
如果您使用的是SQL Server 2008,请使用table-valued parameter。如果您不熟悉,它基本上允许您将表作为参数传递给存储过程。好处是您可以构建您传入的DataTable
以查找您想要的内容。
我做了类似这样的事情而不是传递了几十个参数,我通过了一个TVP,其中有两列[KEY]和[VALUE]。这样,当您的参数在将来发生变化时,就会存在一个抽象层来隔离迁移。当然,您如何选择实施它取决于具体情况。
答案 2 :(得分:0)
通常不需要很多变量来存储参数;你需要为每个arg添加SqlParameter
(等),但你可以在循环中设置它们(/ etc)。
答案 3 :(得分:0)
在2.0中执行此操作的最佳方法是将包含所有参数的XML传递给存储过程,然后使用OPENXML获取每个参数。然后在SP中使用它。
参考这些链接
Passing Parameters as Xml to a Stored Procedure 和 http://www.eggheadcafe.com/articles/20030627c.asp