当前位置: 首页 > 知识库问答 >
问题:

T-SQL中的动态WHERE子句

东方镜
2023-03-14
 Field1 Field2 Field3 ReportId

 2       NULL   NULL  Rep1     
 5       4      NULL  Rep2
 6       NULL   8     Rep4
Field1 = Parameter1
Field1 = Parameter1 AND Field2 =Parameter2

根据给定的表数据,第三行中的非空字段是“field1”和“field3”。因此WHERE子句将是:

Field1 = Parameter1 AND Field3 =Parameter3

我如何编写一个具有动态WHERE子句的通用SQL来满足这个需求?

共有1个答案

梁丘兴腾
2023-03-14

勒叹息。

我想到的解决办法很简单:

WHERE (Field1 IS NULL OR Field1=@Parameter1)
AND (Field2 IS NULL OR Field2=@Parameter2)
AND ...

您可以将任意数量的字段/参数配对堆叠到此解决方案中。

 类似资料:
  • Where 子句用于在从表中获取数据或将其包含在其他表中时生成条件。如果满足条件,则它从表中返回一个特定值。我们使用 WHERE 子句来过滤数据库中的记录并获取主要记录。 在 SELECT 语句中使用了 WHERE 子句,但它也用于 UPDATE、DELETE 帐户等。 语法: 我们使用逻辑运算符生成条件,它们是:、、、、 等。 下面来看一个例子,已更换的理解: 示例 请参阅具有以下记录的 EMP

  • 问题内容: 在此找到了两个类似的问题,但无法弄清楚如何应用于我的方案。 我的函数有一个名为 @IncludeBelow 的参数。值是0或1(BIT)。 我有这个查询: 如果@IncludeBelow为0,我需要查询如下: 如果@IncludeBelow为1,则最后一行需要排除。(即不应用过滤器)。 我猜想它必须是一条语句,但无法弄清楚语法。 这是我尝试过的: 显然,这是不正确的。 正确的语法是什么

  • 问题内容: 我有以下带有四个参数的存储过程。 存储过程: 好吧,我正在这样准备: 这是一个正确的方式 或 有没有更好的方式来准备动态条款? 问题答案: 这就是所谓的全部查询,它基本上是这样的:

  • 问题内容: 好吧,我有一张看起来像这样的表 现在,我需要将其转换为: 我一直在看动态透视图示例,但是我似乎无法使其适合我的情况。 有人可以帮忙吗? 问题答案: 看下面的例子

  • 问题内容: 我在为查询中的字段生成别名时遇到问题,例如,该字段为我提供了去年和前一年的收入。我的理解是我可以做些类似的事情: 但这是行不通的。有人知道如何做到这一点吗? 我想以一张桌子结束 在此先多谢! 问题答案: DECLARE @sql VARCHAR(1000); SET @sql = ‘SELECT 1234 AS REVENUE’ + CAST (year(DATEADD(year,-1

  • 问题内容: 我在某处看到此查询- 什么是 “N” 是什么意思?我不确定这是否仅对SQL Server有效。 问题答案: N代表“国家字符”,它表示字符串的内容为Unicode。 只要碰到专有名称或其他可能包含默认ASCII字符集以外的字符的实体,就应该使用Unicode(/ )。如果不使用前缀将此类字符串括起来,则会丢失数据。例如: 结果: 您还应确保在您或其他子句中对列使用前缀。不使用前缀时,由