基于参数的动态条件

时间:2015-06-12 21:26:41

标签: sql sql-server-2012

我有一个参数,我需要在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条件的情况下包含或排除此条件?

1 个答案:

答案 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;

您的程序可以使用参数进行所有此过程。