Lors de la recherche d'une liste de produits, le paramètre @SearchType
est facultatif. Si @SearchType
est vide ou NULL
, il doit alors renvoyer tous les produits et ne pas utiliser la clause WHERE
. Sinon, s'il passait Equipment
, il l'utiliserait alors à la place.
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
Juste utiliser
Si @searchType est null, cela signifie 'renvoyer la table entière', utilisez
WHERE p.[Type] = @SearchType OR @SearchType is NULL
Si @searchType est une chaîne vide, cela signifie 'retourner la table entière', utilisez
WHERE p.[Type] = @SearchType OR @SearchType = ''
Si @searchType est null ou qu'une chaîne vide signifie "renvoyer la table entière", utilisez
WHERE p.[Type] = @SearchType OR Coalesce(@SearchType,'') = ''
Si vous ne souhaitez pas transmettre le paramètre lorsque vous ne souhaitez pas effectuer de recherche, vous devez le rendre facultatif au lieu de supposer que ''
et NULL
sont identiques.
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
Maintenant, si vous passez NULL
, une chaîne vide (''
), ou si vous omettez le paramètre, la clause where sera essentiellement ignorée.
WHERE p.[Type] = isnull(@SearchType, p.[Type])
Si vous pouvez utiliser une requête dynamique, vous pouvez utiliser LEN
. Il donnera false sur les chaînes vides et nulles. De cette manière, vous pouvez implémenter le paramètre option.
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
Ancien post mais qui vaut le coup d'oeil pour quelqu'un qui trébuche comme moi
ISNULL(NULLIF(ColumnName, ' '), NULL) IS NOT NULL
ISNULL(NULLIF(ColumnName, ' '), NULL) IS NULL