我尝试编写一个存储过程,我希望通过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
答案 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/