20

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

DECLARE @productID INT = NULL

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

6 回答 6

42

用例陈述:

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

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

SELECT ProductID, ProductName,ProductDesc 
FROM product 
WHERE ProductID =IIF(@productID IS NULL, ProductID, @productID )
于 2013-10-14T10:17:01.237 回答
17

为什么不只是:

DECLARE @productID INT = NULL

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

这是SQLFiddle 中的演示,带有 NULL 和 @productID 的值

于 2013-10-14T10:27:00.490 回答
8

Try this

DECLARE @productID INT = NULL

SELECT 
    ProductID,
    ProductName,
    ProductDesc 
FROM
    product 
WHERE 
    ProductID = isnull(@productID,ProductID)
于 2016-06-01T08:33:50.417 回答
0
SELECT
    ProductID,
    ProductName,
    ProductDesc 
FROM
    product 
WHERE
    ProductID = CASE WHEN @productID IS NULL THEN ProductID ELSE @productID END
于 2013-10-14T10:17:59.383 回答
0

使用CASE语句时性能是一个令人难以置信的好:

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

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

于 2019-03-04T21:49:55.717 回答
0

由于“”没有被识别为NULL我使用的值

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

在我的代码中:

 MyDataAdapter.SelectCommand.Parameters("@productID").Value = 1
于 2018-10-18T06:14:20.317 回答