2013-10-14 2 views
6

Gibt es eine Möglichkeit, das folgende Skript zu schreiben, so dass es alle Produkte zurückgibt, wenn die ProductID-Variable null ist? Und ein bestimmtes Produkt zurückgeben, wenn das Produkt nicht null ist. Was ich habe, so weit:SQL select all, wenn der Parameter null ist sonst Rückgabe specific item

DECLARE @productID INT = NULL 

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

Antwort

23

Use Case-Anweisung:

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

Oder IIF() Funktion, wenn Sie SQL Server 2012 verwenden:

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

wow wussten nicht, hatte 2012 IIF Funktion in es, ich kann einfach nicht warten, meine Firma 2012 upgarde –

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

Warum nicht nur:

DECLARE @productID INT = NULL 

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

hier ein demo in SQLFiddle mit NULL und einen Wert für @productID

+0

+1 zur Vermeidung von Fallangaben – Oliver

5

Versuchen Sie, diese

DECLARE @productID INT = NULL 

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