如何将存储过程中的大量参数从代码传递到SQL Server

时间:2010-06-07 05:53:29

标签: c# sql

如何从代码中将大量参数(例如20+)传递给存储过程?

就像我们可以将一个类对象中的所有参数分组然后传递给它,但是如何在存储过程的情况下实现这一点。

目前我必须创建20多个变量来传递参数。

由于 Ashwani

4 个答案:

答案 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 Procedurehttp://www.eggheadcafe.com/articles/20030627c.asp