如何有基于参数值的条件 where 子句

Posted

技术标签:

【中文标题】如何有基于参数值的条件 where 子句【英文标题】:How to have conditional where clause based on parameter value 【发布时间】:2017-10-04 00:40:29 【问题描述】:

我有以下 SQL,

DECLARE @EmployeeID Int

SELECT *
  FROM [Northwind].[dbo].[Orders]
  WHERE OrderID = 10248
  AND EmployeeID = @EmployeeID

我要确定IF @EmployeeID IS NULL 然后不包括AND

类似的,

SELECT *
  FROM [Northwind].[dbo].[Orders]
  WHERE OrderID = 10248
  IF @EmployeeID IS NOT  NULL
  AND EmployeeID = @EmployeeID

我可以考虑创建一个表变量,然后根据参数值对其进行过滤,但是有没有更好的方法?

【问题讨论】:

参考***.com/questions/87821/… 【参考方案1】:

我想你想要:

WHERE OrderID = 10248 AND
      (@EmployeeId IS NULL OR EmployeeID = @EmployeeID)

【讨论】:

【参考方案2】:
DECLARE @EmployeeID Int

SELECT *
  FROM [Northwind].[dbo].[Orders]
  WHERE OrderID = 10248
  AND EmployeeID = ISNULL(@EmployeeID, EmployeeID )

【讨论】:

以上是关于如何有基于参数值的条件 where 子句的主要内容,如果未能解决你的问题,请参考以下文章

在mysql select语句中使用条件where子句

向 where 子句添加条件

在 where 子句中提取/更新休眠字符串参数值

将过程参数传递给 SELECT INTO where 子句不起作用

WHERE IS NULL、IS NOT NULL 或 NO WHERE 子句取决于 SQL Server 参数值

SQL Server If 条件在 where 子句?