it-swarm.com.de

SQL Server: Prüfen Sie, ob die Variable leer oder NULL für die WHERE-Klausel ist

Bei der Suche nach einer Liste von Produkten ist der Parameter @SearchType optional. Wenn @SearchType leer oder NULL ist, sollte es alle Produkte zurückgeben und nicht die WHERE-Klausel verwenden. Andernfalls würde es stattdessen Equipment verwenden.

ALTER PROCEDURE [dbo].[psProducts] 
    (@SearchType varchar(50))
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        P.[ProductId],
        P.[ProductName],
        P.[ProductPrice],
        P.[Type]
    FROM [Product] P
    -- if @Searchtype is not null then use the where clause
    WHERE p.[Type] = @SearchType
END
32
User970008

Benutz einfach

Wenn @searchType den Wert null hat, muss die gesamte Tabelle zurückgegeben werden

WHERE p.[Type] = @SearchType OR @SearchType is NULL

Wenn @searchType eine leere Zeichenfolge ist, bedeutet dies, dass die gesamte Tabelle zurückgegeben werden muss

WHERE p.[Type] = @SearchType OR @SearchType = ''

Wenn @searchType null ist oder eine leere Zeichenfolge "Die gesamte Tabelle zurückgeben" bedeutet, verwenden Sie

WHERE p.[Type] = @SearchType OR Coalesce(@SearchType,'') = ''
88
Phil

Wenn Sie den Parameter nicht übergeben möchten, wenn Sie nicht suchen möchten, sollten Sie den Parameter als optional festlegen, anstatt anzunehmen, dass '' und NULL dasselbe sind.

ALTER PROCEDURE [dbo].[psProducts] 
(
  @SearchType varchar(50) = NULL
)
AS
BEGIN
  SET NOCOUNT ON;

  SELECT P.[ProductId]
  ,P.[ProductName]
  ,P.[ProductPrice]
  ,P.[Type]
  FROM dbo.[Product] AS P
  WHERE p.[Type] = COALESCE(NULLIF(@SearchType, ''), p.[Type]);
END
GO

Wenn Sie nun NULL, eine leere Zeichenfolge ('') übergeben oder den Parameter weglassen, wird die where-Klausel im Wesentlichen ignoriert.

14
Aaron Bertrand
WHERE p.[Type] = isnull(@SearchType, p.[Type])
5
RedFilter

Wenn Sie eine dynamische Abfrage verwenden können, können Sie LEN verwenden. Es wird sowohl für leere Zeichenfolge als auch für leere Zeichenfolge falsch angegeben. Auf diese Weise können Sie den Optionsparameter implementieren.

ALTER PROCEDURE [dbo].[psProducts] 
(@SearchType varchar(50))
AS
BEGIN
    SET NOCOUNT ON;

DECLARE @Query nvarchar(max) = N'
    SELECT 
        P.[ProductId],
        P.[ProductName],
        P.[ProductPrice],
        P.[Type]
    FROM [Product] P'
    -- if @Searchtype is not null then use the where clause
    SET @Query = CASE WHEN LEN(@SearchType) > 0 THEN @Query + ' WHERE p.[Type] = ' + ''''+ @SearchType + '''' ELSE @Query END   

    EXECUTE sp_executesql @Query
    PRINT @Query
END
0
Ali Umair

Alte Post, aber einen Blick wert für jemanden, der wie ich stolpert 

ISNULL(NULLIF(ColumnName, ' '), NULL) IS NOT NULL

ISNULL(NULLIF(ColumnName, ' '), NULL) IS NULL
0
singhswat