Sql 许多条件取决于WHERE子句中的IF子句

Sql 许多条件取决于WHERE子句中的IF子句,sql,sql-server,tsql,select,where-clause,Sql,Sql Server,Tsql,Select,Where Clause,如何实现依赖于一个@value条件的WHERE子句,如下面的伪代码: Select * from table WHERE IF(@value is not null) Id > 10 and Name = 'example' and Address is not null and ... etc ELSE Email is not null 正如您所看到的,您不能像那样使用if,但可以使用and和or逻辑运算符创建所需的行为: 挑选* 从桌子上 其中@value不为N

如何实现依赖于一个@value条件的WHERE子句,如下面的伪代码:

Select * from table
WHERE
IF(@value is not null) 
    Id > 10 and Name = 'example' and Address is not null and ... etc
ELSE 
    Email is not null

正如您所看到的,您不能像那样使用if,但可以使用and和or逻辑运算符创建所需的行为:

挑选* 从桌子上 其中@value不为NULL,并且 id>10和 name='example'和 地址不为空,等等。。。或 @值为NULL,电子邮件不为NULL
正如您所看到的,您不能像那样使用if,但可以使用and和or逻辑运算符创建所需的行为:

挑选* 从桌子上 其中@value不为NULL,并且 id>10和 name='example'和 地址不为空,等等。。。或 @值为NULL,电子邮件不为NULL
只有当@value为null时,您才希望电子邮件返回记录不为null。 您需要为if.的两个分支指定前提条件。。在你的例子中还有其他的例子

SELECT *
FROM Table
WHERE (@value IS NOT NULL AND Id > 10 AND ....)
    OR (@value IS NULL AND Email IS NOT NULL)

只有当@value为null时,您才希望电子邮件返回记录不为null。 您需要为if.的两个分支指定前提条件。。在你的例子中还有其他的例子

SELECT *
FROM Table
WHERE (@value IS NOT NULL AND Id > 10 AND ....)
    OR (@value IS NULL AND Email IS NOT NULL)

@值不是列的名称。它是一个取决于的变量。@kenzolek假设它已传递到函数中,您仍然可以以这种方式使用它。这将包括电子邮件记录不为null,即使@value不为null,例如,当name不为id:9的exampleRecord时,电邮:email@dot.com将在@value不为null时返回-这不是OP想要的。捕捉良好,已编辑和fixed@value不是列的名称。它是一个取决于的变量。@kenzolek假设它已传递到函数中,您仍然可以以这种方式使用它。这将包括电子邮件记录不为null,即使@value不为null,例如,当name不为id:9的exampleRecord时,电邮:email@dot.com将在@value不为null时返回-这不是OP想要的。捕捉良好,已编辑并修复