3

我试图编写一个存储过程,我想通过 IF/Else 语句测试传入的参数的某个值,并最终将结果与另一个表相交。类似于以下内容的非工作伪示例。

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
4

2 回答 2

4

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

SELECT 
   * 
FROM 
   Table 
WHERE 
   @keyword IS NULL 
OR [Keyword] LIKE @Keyword
INTERSECT
SELECT 
  * 
FROM 
  Table 
WHERE 
  @ClassificationId IS NULL 
OR [ClassificationID] = @ClassificationId
于 2013-05-29T19:33:55.760 回答
3

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

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

于 2013-05-29T19:31:49.490 回答