存储过程的动态参数

时间:2011-08-03 06:58:15

标签: sql-server stored-procedures

我在为存储过程创建动态参数时遇到问题。 我在存储过程中有两个nvarchar参数,这些参数是用逗号分隔的单词组合。 例如:

    'Login, check, take, return' and 'admin, yes, no, yes' 

我必须在where子句中包含这些参数,如

    login=admin and check=yes and take=no and return=yes

问题是参数中的单词数是动态的。它可以从1到20个字不等。

有没有解决办法?

3 个答案:

答案 0 :(得分:2)

  • 定义20个参数,默认值为NULL
  • 仅设置您想要的
  • 在WHERE子句中执行(@Param IS NULL or Column = @Param)

如果你有完全动态的SQL和随机参数名称,那么它就是

之一
  • 您不应该使用存储过程
  • 您需要为不同的用例编写更多存储过程

你不会有一个完全动态的.net方法吗?

答案 1 :(得分:0)

您必须在存储过程中创建动态SQL查询。在存储过程中,您必须拆分参数和值,并在where where条件下构建动态。

答案 2 :(得分:0)

您必须保存存储过程中的变量。

E.g。

@sql as nvarchar(1000)
@sql = 'select * from tablename where'

现在你循环遍历你的变量,如

@sql =  @sql +' '+ @firstvariable + ' = '''+ @valuevariable +'' AND '