参数数目可变的EXEC sp_executesql

参数数目可变的EXEC sp_executesql,sql,sql-server,sql-server-2008,sp-executesql,Sql,Sql Server,Sql Server 2008,Sp Executesql,我正在尝试实现一个用户可定制的搜索,最后我进入了SQL部分。用户可以选择数量可变的条件,我将所有内容发送到存储过程的表值参数中。我知道了如何创建sql字符串的逻辑,但我仍然停留在发送参数的部分。伪代码示例如下: foreach parameter in the table-valued parameter SqlString = SqlString + '@parameter' ParamList= ParamList + '@parameter' EXEC sp_executes

我正在尝试实现一个用户可定制的搜索,最后我进入了SQL部分。用户可以选择数量可变的条件,我将所有内容发送到存储过程的表值参数中。我知道了如何创建sql字符串的逻辑,但我仍然停留在发送参数的部分。伪代码示例如下:

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

EXEC sp_executesql SqlString , ParamList, ???

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

用列名、运算符和值填充表变量。然后您可以遍历它并构建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 

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