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

时间:2013-10-14 10:15:03

标签: sql-server

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

DECLARE @productID INT = NULL

SELECT
    ProductID,
    ProductName,
    ProductDesc 
FROM
    product 
WHERE
    ProductID = @productID

6 个答案:

答案 0 :(得分:33)

用例陈述:

SELECT ProductID, ProductName,ProductDesc 
FROM product 
WHERE ProductID = CASE WHEN @productID IS NULL THEN ProductID ELSE @productID END

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

SELECT ProductID, ProductName,ProductDesc 
FROM product 
WHERE ProductID =IIF(@productID IS NULL, ProductID, @productID )

答案 1 :(得分:14)

为什么不呢:

DECLARE @productID INT = NULL

SELECT ProductID, ProductName,ProductDesc 
FROM   product 
WHERE  ProductID = @productID
OR     @productID IS NULL;

这里有一个demo in SQLFiddle,其中包含NULL和@productID

的值

答案 2 :(得分:6)

试试这个

DECLARE @productID INT = NULL

SELECT 
    ProductID,
    ProductName,
    ProductDesc 
FROM
    product 
WHERE 
    ProductID = isnull(@productID,ProductID)

答案 3 :(得分:0)

SELECT
    ProductID,
    ProductName,
    ProductDesc 
FROM
    product 
WHERE
    ProductID = CASE WHEN @productID IS NULL THEN ProductID ELSE @productID END

答案 4 :(得分:0)

由于“”未被识别为NULL我使用了值

SELECT ProductID, ProductName,ProductDesc 
FROM product 
WHERE ProductID =IIF(@productID =1, ProductID, @productID )

在我的代码中:

 MyDataAdapter.SelectCommand.Parameters("@productID").Value = 1

答案 5 :(得分:0)

使用CASE语句时,性能要好得多:

SELECT ProductID, ProductName,ProductDesc 
FROM product 
WHERE ProductID = CASE WHEN @productID IS NULL THEN ProductID ELSE @productID END

ISNULL()阻止优化器在该列上使用索引。