sql - T-SQL 中的动态 WHERE 子句

标签 sql sql-server sql-server-2008 t-sql

我需要在字段值或字段值组合匹配时显示报告。
我设计了一个表来存储针对字段或字段组合的 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/

相关文章:

java - Java Web 应用程序的性能测试

sql-server - 将时间添加到 SQL Server 中的行

sql - GROUP 中不同表的 COUNT 个

sql - 访问数据库元数据

java - 将日期时间解析为 JAVA 日期

SQL 查询 - 获取每个文档的最新文档版本 URL

sql - 无需 PIVOT 运算符即可执行枢转

sql - SQL Server 2008 中唯一的日期范围字段

mysql - 如果 MySQL 对 AND 条件使用索引,为什么或何时不对 OR 条件使用索引?

sql - 条件检查,多列的单值/多值,逗号分隔列