我有一个参数,我需要在where
子句中包含或排除一个条件。
如果CustomerType
参数为空,则我需要包含条件CustomerType is null
,否则我需要排除CustomerType is null
条件。
SQL查询是:
IF(@CustomerType = Blank)
BEGIN
Select * From Customer
Where
(CustomerType IN(@Type) Or CustomerType is null)
END
Else
Begin
Select * From Customer
Where
CustomerType IN(@Type)
End
是否有更好的方法可以在不使用上述IF ELSE
条件的情况下包含或排除此条件?
答案 0 :(得分:4)
尝试
Select * From Customer
Where
(CustomerType is null AND @customertype ='')
OR
CustomerType IN (@Type)
但是,您需要更改“IN”部分。
编辑:
Select * From Customer
Where (@customertype ='') OR CustomerType IN (...)
在一个存储过程中处理所有输入:
CREATE PROCEDURE FIND_CUSTOMER_BY_TYPE @TYPE VARCHAR(50)
AS
BEGIN
-- a lazy check on your parameters
IF @TYPE LIKE '%[^0-9, ]%' BEGIN
RAISERROR('Invalid parameter',16,1);
return;
End;
SET NOCOUNT ON;
DECLARE @SQL VARCHAR(500);
SET @SQL='SELECT * FROM CUSTOMERS';
IF @TYPE>''
SET @SQL = @SQL + ' WHERE CUSTOMER_TYPE IN ('+@TYPE+')';
EXEC(@SQL);
SET NOCOUNT OFF;
END;
您的程序可以使用参数进行所有此过程。