2013-05-29 68 views
3

我試圖編寫一個存儲過程,我想通過IF/Else語句測試某個值的傳入參數,並最終將結果與另一個表交叉。像下面這樣一個非工作的僞示例。在SQL Server中使用條件操作與INTERSECT結合使用

ALTER PROCEDURE [dbo].[Search] 
    @Keyword nvarchar(MAX), 
    @ClasificationId int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF (@Keyword != null) 
     SELECT * FROM Table WHERE [Keyword] LIKE @Keyword 
    ELSE 
     SELECT * FROM Table 

    INTERSECT 

    IF (@Classification != null) 
     SELECT * FROM Table WHERE [ClassificationID] = @ClassificationId 
    ELSE 
     SELECT * FROM Table 
END 
+0

ClassificationID是一個NVARCHAR(MAX)?不像大多數字段沒有? –

+0

loool你是對的。好點 – Sam

回答

4

你可以用一個簡單的修改,滿足您的要求,每一個WHERE子句。

SELECT 
    * 
FROM 
    Table 
WHERE 
    @keyword IS NULL 
OR [Keyword] LIKE @Keyword 
INTERSECT 
SELECT 
    * 
FROM 
    Table 
WHERE 
    @ClassificationId IS NULL 
OR [ClassificationID] = @ClassificationId