有没有办法编写以下脚本,以便在 ProductID 变量为 null 时返回所有产品?并在产品不为空时返回特定产品。到目前为止我所拥有的:
DECLARE @productID INT = NULL
SELECT
ProductID,
ProductName,
ProductDesc
FROM
product
WHERE
ProductID = @productID
有没有办法编写以下脚本,以便在 ProductID 变量为 null 时返回所有产品?并在产品不为空时返回特定产品。到目前为止我所拥有的:
DECLARE @productID INT = NULL
SELECT
ProductID,
ProductName,
ProductDesc
FROM
product
WHERE
ProductID = @productID
用例陈述:
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 )
为什么不只是:
DECLARE @productID INT = NULL
SELECT ProductID, ProductName,ProductDesc
FROM product
WHERE ProductID = @productID
OR @productID IS NULL;
这是SQLFiddle 中的演示,带有 NULL 和 @productID 的值
Try this
DECLARE @productID INT = NULL
SELECT
ProductID,
ProductName,
ProductDesc
FROM
product
WHERE
ProductID = isnull(@productID,ProductID)
SELECT
ProductID,
ProductName,
ProductDesc
FROM
product
WHERE
ProductID = CASE WHEN @productID IS NULL THEN ProductID ELSE @productID END
使用CASE
语句时性能是一个令人难以置信的好:
SELECT ProductID, ProductName,ProductDesc
FROM product
WHERE ProductID = CASE WHEN @productID IS NULL THEN ProductID ELSE @productID END
ISNULL()
防止优化器在该列上使用索引。
由于“”没有被识别为NULL
我使用的值
SELECT ProductID, ProductName,ProductDesc
FROM product
WHERE ProductID =IIF(@productID =1, ProductID, @productID )
在我的代码中:
MyDataAdapter.SelectCommand.Parameters("@productID").Value = 1