有没有办法编写以下脚本,以便在ProductID变量为null时返回所有产品?当产品不为空时返回特定产品。 到目前为止我所拥有的:
DECLARE @productID INT = NULL
SELECT
ProductID,
ProductName,
ProductDesc
FROM
product
WHERE
ProductID = @productID
答案 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()
阻止优化器在该列上使用索引。