我对构建一个基于另一个表中的表行值返回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
根据用户在queryValue
表的reportParameters
列中输入的内容,我想构建一个执行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语句构造成一个字符串变量并执行它。但它必须是一个更优雅的解决方案吗?
答案 0 :(得分:1)
我不确定是否有,如果查询有一个小的,已知的字段集,那么你可以在伴随选择器的地方列出所有字段:
(IF NOT NULL reportParameters.field AND reportParameters.field = reportValues.field)
没有短路评估,但它可能仍然具有预期的效果。否则,它将归结为动态SQL和EXEC()
。
答案 1 :(得分:0)
您可以使用CASE构造条件WHERE子句。见this close to the bottom of the article.