製品のリストを検索する場合、@SearchType
パラメータはオプションです。 @SearchType
が空またはNULL
の場合、すべての製品を返す必要があり、WHERE
句を使用しないでください。それ以外の場合、Equipment
を渡すと、代わりにそれを使用します。
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
ただ使う
@searchTypeがnullの場合、「テーブル全体を返す」ことを意味する場合は、
WHERE p.[Type] = @SearchType OR @SearchType is NULL
@searchTypeが空の文字列である場合、「テーブル全体を返す」ことを意味し、
WHERE p.[Type] = @SearchType OR @SearchType = ''
@searchTypeがnullまたは空の文字列が「テーブル全体を返す」ことを意味する場合、
WHERE p.[Type] = @SearchType OR Coalesce(@SearchType,'') = ''
検索したくないときにパラメーターを渡したくない場合は、''
とNULL
は同じものです。
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
NULL
、空の文字列(''
)、またはパラメータを省略すると、where句は本質的に無視されます。
WHERE p.[Type] = isnull(@SearchType, p.[Type])
動的クエリを使用できる場合は、LEN
を使用できます。空文字列とnull文字列の両方でfalseを返します。このようにして、オプションパラメータを実装できます。
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
古い投稿ですが、私のようにつまずく人のために一見の価値があります
ISNULL(NULLIF(ColumnName, ' '), NULL) IS NOT NULL
ISNULL(NULLIF(ColumnName, ' '), NULL) IS NULL