我需要在字段值或字段值组合匹配时显示报告。
我设计了一个表来存储针对字段或字段组合的 ReportId 值。我已将这些值存储在一个模式中,以便我可以构造 SQL 的 WHERE 子句来获取所需的数据。以下是表格数据:
Field1 Field2 Field3 ReportId
2 NULL NULL Rep1
5 4 NULL Rep2
6 NULL 8 Rep4
现在,我想创建一个存储过程来获取相关的 ReportId。在存储过程中,我有以下参数作为输入:
参数1、参数2、参数3
在存储过程中,我想构造一个带有动态 WHERE 子句的 SQL 来获取 ReportId。 WHERE 子句将在所有 NON NULL 字段之间放置 AND 运算符,并与传递的参数进行比较。 根据给定的表数据,第一行中的非空字段是“Field1”。所以 WHERE 子句将是
Field1 = Parameter1
根据给定的表数据,第二行中的非空字段是“Field1”和“Field2”。所以 WHERE 子句将是:
Field1 = Parameter1 AND Field2 =Parameter2
根据给定的表数据,第三行中的非空字段是“Field1”和“Field3”。所以 WHERE 子句将是:
Field1 = Parameter1 AND Field3 =Parameter3
如何针对此要求编写带有动态 WHERE 子句的通用 SQL?
最佳答案
叹息。
我想到的解决方案很简单:
WHERE (Field1 IS NULL OR Field1=@Parameter1)
AND (Field2 IS NULL OR Field2=@Parameter2)
AND ...
您可以将任意数量的字段/参数对堆叠到此解决方案中。
关于sql - T-SQL 中的动态 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27570572/