2013-10-15 22 views
2

我正在尝试实现用户可自定义的搜索,并最终到达了SQL部分。用户可以选择可变数量的条件,并将所有内容以表值参数的形式发送到存储过程。我想出了如何创建sql字符串的逻辑,但是我被卡在发送参数的部分。一个伪代码的例子是:具有可变数量参数的EXEC sp_executesql

foreach parameter in the table-valued parameter 
    SqlString = SqlString + '@parameter' 
    ParamList= ParamList + '@parameter' 

EXEC sp_executesql SqlString , ParamList, ??? 

我的问题是我如何设置参数,当我不知道它们有多少?

回答

0

使用列名称,运算符和值填充您的表变量。然后你可以遍历它并构建一个where子句。然后将where子句附加到您的sqlstring参数。

Declare @WhereClause varchar(max) 
set @WhereClause = 'Where 1=1' 

...然后通过表环......

Select @WhereClause = @WhereClause + ' and ' + ColumnName + ' ' + Operator + ' ' + Value 
From @tableVariable 

追加where子句select语句并执行

EXEC sp_executesql @SqlString + @WhereClause 
+1

这是主要的想法,但为了防止SQL注入我需要将该值作为参数添加,而不仅仅将它与主字符串连接起来。如果我这样做,那么我需要将参数添加到Exec命令中... –