2013-10-14 11 views
6

Có cách nào để viết tập lệnh sau để nó trả về tất cả các sản phẩm nếu biến ProductID là null không? Và trả về một sản phẩm cụ thể khi sản phẩm không rỗng. Những gì tôi có cho đến nay:SQL chọn tất cả nếu tham số null khác trả về mục specfic

DECLARE @productID INT = NULL 

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

Trả lời

23

Sử dụng trường hợp tuyên bố:

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

Hoặc chức năng IIF() nếu bạn đang sử dụng SQL Server 2012:

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

wow didnt biết 2012 có IIF hàm trong nó, tôi chờ đợi chỉ không thể cho công ty của tôi để upgarde đến năm 2012 –

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

Tại sao không chỉ:

DECLARE @productID INT = NULL 

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

Dưới đây là một demo in SQLFiddle với NULL và giá trị cho @productID

+0

1 để tránh trường hợp tuyên bố – Oliver

5

Hãy thử điều này

DECLARE @productID INT = NULL 

SELECT 
    ProductID, 
    ProductName, 
    ProductDesc 
FROM 
    product 
WHERE 
    ProductID = isnull(@productID,ProductID) 
Các vấn đề liên quan