Use*_*008 33 sql sql-server if-statement where-clause
搜索产品列表时,@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
Run Code Online (Sandbox Code Playgroud)
Phi*_*hil 91
只是用
如果@searchType为null意味着'返回整个表'然后使用
WHERE p.[Type] = @SearchType OR @SearchType is NULL
Run Code Online (Sandbox Code Playgroud)
如果@searchType是空字符串意味着'返回整个表'然后使用
WHERE p.[Type] = @SearchType OR @SearchType = ''
Run Code Online (Sandbox Code Playgroud)
如果@searchType为null或空字符串表示'返回整个表',则使用
WHERE p.[Type] = @SearchType OR Coalesce(@SearchType,'') = ''
Run Code Online (Sandbox Code Playgroud)
Aar*_*and 14
如果你不希望传递,当你不想要搜索的参数,那么你应该做的参数可选,而不是假设''
和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
Run Code Online (Sandbox Code Playgroud)
现在如果你传递NULL
一个空字符串(''
),或者省略参数,那么where子句基本上会被忽略.
WHERE p.[Type] = isnull(@SearchType, p.[Type])
Run Code Online (Sandbox Code Playgroud)