在SQL Server中使用条件运算符和INTERSECT

时间:2013-05-29 19:29:29

标签: sql sql-server sql-server-2008

我尝试编写一个存储过程,我希望通过IF / Else语句测试某个值的传入参数,并最终将结果与另一个表进行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

2 个答案:

答案 0 :(得分:4)

您可以通过对每个WHERE子句进行简单修改来满足您的要求。

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

答案 1 :(得分:3)

作为一个捕获所有类型的查询,这更容易完成 - 我建议正确完成动态sql方法:你将为每个查询排列得到一个好的计划。

阅读本文: http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/