2013-05-29 33 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