SQL select all all if参数为null,否则返回特定项

nic*_*ken 10 sql-server

有没有办法编写以下脚本,以便在ProductID变量为null时返回所有产品?当产品不为空时返回特定产品.到目前为止我所拥有的:

DECLARE @productID INT = NULL

SELECT
    ProductID,
    ProductName,
    ProductDesc 
FROM
    product 
WHERE
    ProductID = @productID
Run Code Online (Sandbox Code Playgroud)

Har*_*der 33

用例陈述:

SELECT ProductID, ProductName,ProductDesc 
FROM product 
WHERE ProductID = CASE WHEN @productID IS NULL THEN ProductID ELSE @productID END
Run Code Online (Sandbox Code Playgroud)

或者IIF()函数,如果您使用的是SQL Server 2012:

SELECT ProductID, ProductName,ProductDesc 
FROM product 
WHERE ProductID =IIF(@productID IS NULL, ProductID, @productID )
Run Code Online (Sandbox Code Playgroud)


muc*_*cio 13

为什么不呢:

DECLARE @productID INT = NULL

SELECT ProductID, ProductName,ProductDesc 
FROM   product 
WHERE  ProductID = @productID
OR     @productID IS NULL;
Run Code Online (Sandbox Code Playgroud)

这里是SQLFiddle的一个演示,带有NULL和@productID的值


小智 6

试试这个

DECLARE @productID INT = NULL

SELECT 
    ProductID,
    ProductName,
    ProductDesc 
FROM
    product 
WHERE 
    ProductID = isnull(@productID,ProductID)
Run Code Online (Sandbox Code Playgroud)