Tsql 将列作为变量传递给T-SQL中的存储过程

Tsql 将列作为变量传递给T-SQL中的存储过程,tsql,Tsql,我对构造一个基于另一个表中的表行值返回SELECT语句的存储过程的最佳方法有点困惑 这个问题最好描述为: Table Name: reportValues -------------------------------------------- ID name date region -------------------------------------------- 1 Stefan 2010-01-01 UK 2

我对构造一个基于另一个表中的表行值返回SELECT语句的存储过程的最佳方法有点困惑

这个问题最好描述为:

Table Name: reportValues
--------------------------------------------
ID       name       date        region
--------------------------------------------
1        Stefan     2010-01-01  UK
2        David      2010-01-05  SE
3        Anna       2010-01-12  NO
4        Marie      2010-01-15  NO


Table Name: reportParameters
-------------------------------
ID       column     queryValue 
-------------------------------
1        ID       
2        name     
3        date       
4        region     
根据用户在
reportParameters
表的
queryValue
列中输入的内容,我想构造一个存储过程,它执行如下SELECT语句:

SELECT * FROM reportValues WHERE region = 'NO' 
如果用户输入了以下值:

Table Name: reportParameters
-------------------------------
ID       column     queryValue 
-------------------------------
1        ID       
2        name       
3        date       
4        region     NO
但也可能是:

SELECT * FROM reportValues WHERE region = 'NO' AND name = 'Anna'
如果用户已输入:

Table Name: reportParameters
-------------------------------
ID       column     queryValue 
-------------------------------
1        ID       
2        name       Anna
3        date       
4        region     NO

我最初的想法是创建一个循环,将SELECT语句构造成一个字符串变量并执行它。但这一定是一个更优雅的解决方案?

我不确定是否有,如果查询有一个小的、已知的字段集,那么您可以在带有选择器的where中列出它们:

(IF NOT NULL reportParameters.field AND reportParameters.field = reportValues.field)

没有短路评估,但可能仍有预期效果。否则就只能使用动态SQL和
EXEC()

您可以使用CASE构造条件WHERE子句。看