2015-06-12 65 views
0

我有一個參數,我需要在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

'(@type)'不會像你可能希望的那樣工作。 –

回答

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 ('[email protected]+')'; 
    EXEC(@SQL); 
    SET NOCOUNT OFF; 
END; 

你的程序都可以此過程與參數。

+0

感謝您的回覆。但是,當CustomerType參數爲空時,我不想包含「CustomerType爲null」的情況。 – sarayucm

+0

感謝您的回覆。這裏Type是一個下拉參數,其中包含不同的客戶類型代碼1,2,3和-2。如果用戶選擇Type參數中的所有值以指示包含未指定類型的客戶記錄(類型爲空白),則CustomerType參數將設置爲-2。當用戶選擇特定類型(類型= 1)時,它應該只返回類型1的客戶。因此,查詢不應包括具有空類型的客戶。你能否提供你的意見? – sarayucm

+0

我認爲您需要處理前端程序(或腳本)中的數據,並根據客戶輸入爲數據庫生成不同的查詢語句。如果您必須處理這些不同的輸入,則需要存儲過程並動態生成查詢。我會發佈一個小樣本,但你需要自己完成。 – Tim3880