2013-07-09 52 views
0

我試圖搜索槽幾個bolgs然而,我仍然在Where子句中的SQL案例中掙扎。有人可以幫我嗎?下面是scenario-T-SQL案例在哪裏問題

我有一個表Client_Master,我要創建一個存儲過程,以顯示:

  1. 來自所有客戶端的所有公司,當用戶點擊
  2. 所有公司特定所有單選按鈕只有當客戶端1 CLIENT1上單選按鈕,用戶點擊
  3. 所有公司向特定客戶機2,只有當客戶端2單選按鈕,用戶點擊

我試着寫SQL代碼s -

CREATE PROCEDURE ClientSearchList 
--Exec ClientSearchList 
AS 
    SET NOCOUNT OFF 
BEGIN 
Declare @Filter Varchar(10) 
Set @Filter = Null 
SELECT DISTINCT client_Name FROM M_CLIENT_MASTER 
Where case 
WHEN @Filter = 'ALL' THEN Client_id <> 0 AND Activate = 0 
WHEN @Filter = 'TATA' THEN Client_id <> 0 and Activate = 0 and (Client_Name like '%Tata%' OR Client_Type=9) 
WHEN @Filter = 'CONCEPT' THEN 

IF @@ERROR <> 0 GOTO ERRORHANDLER** 
    SET NOCOUNT OFF 
    RETURN(0) 

ERRORHANDLER: 
    RETURN(@@ERROR) 
END 

請推薦一種方法讓此工作正常。

感謝, 維迪亞

+0

您將@Filter設置爲null,然後對其值進行測試。測試不能被評估爲真。 –

+0

@ X.L.Ant:謝謝 –

回答

6

我不知道爲什麼人們新的SQL似乎當所有他們需要的是布爾運算符來達到CASE - 同一類型,他們在其他語言中肯定會利用運營商:

Where 
    (@Filter = 'ALL' AND Client_id <> 0 AND Activate = 0) OR 
    (@Filter = 'TATA' AND Client_id <> 0 and Activate = 0 and 
     (Client_Name like '%Tata%' OR Client_Type=9)) OR 
    (@Filter = 'CONCEPT' AND ...) 

問題葉CONCEPT分支不完整,所以回答也是。另外,那些第一兩個分支指望有某些相似之處,故可以簡化:

Where 
    (Client_id <> 0 AND Activate = 0 AND 
     (@Filter = 'ALL' OR 
      (@Filter = 'TATA' AND 
       (Client_Name like '%Tata%' OR Client_Type=9) 
      ) 
     ) 
    ) OR 
    (@Filter = 'CONCEPT' AND ...) 

CASE表達 - 它計算一個單一。這不是某種形式的控制流。在 a SELECT聲明中沒有任何這樣的控制流程構造用於

+0

嗨達米安,感謝您的建議。然而,當我選擇All時,我的proc應該有兩件事情,它們是(Client_id <> 0 AND Activate = 0),但是當我選擇Tata時,應該有哪些東西(Client_id <> 0 AND Activate = 0和(Client_Name,如'%Tata%'或Client_Type = 9))。我沒有提及Concept的條件,因爲它與Tata相似。所以金爾迪忽略了這種情況。謝謝 –

+0

@VidyaNandTiwari - 就是說,實際上,我的答案顯示。 –

+0

謝謝,我只是嘗試使用IF構建查詢和一切工作。謝謝。 –