Sql 传递参数时过滤a,不传递参数时返回all
当我传递参数时,如何从查询中筛选记录,当参数有空值时,如何返回所有记录Sql 传递参数时过滤a,不传递参数时返回all,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,当我传递参数时,如何从查询中筛选记录,当参数有空值时,如何返回所有记录 SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum FROM dbo.NegativeFeedbackView nfv WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId GROUP BY nfv.Company_id 下面是一个示例过程,它使用可选参数进
SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
FROM dbo.NegativeFeedbackView nfv
WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId
GROUP BY nfv.Company_id
下面是一个示例过程,它使用可选参数进行筛选
CREATE PROCEDURE USP_MyProc(@FilterParameter AS VARCHAR(100) = NULL)
BEGIN
SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
FROM dbo.NegativeFeedbackView nfv
WHERE
(@compNatureId IS NULL OR ISNULL(nfv.comp_nature_id,0)= @compNatureId )
GROUP BY nfv.Company_id
END
使用
IF/ELSE
:
e、 g
尝试将这些情况合并到单个查询中:
SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
FROM dbo.NegativeFeedbackView nfv
WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId
OR @compNatureId IS NULL
GROUP BY nfv.Company_id
很可能会产生次优计划,并且它不能使用comp\u nature\u id
上的任何索引(如果存在)
SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
FROM dbo.NegativeFeedbackView nfv
WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId
OR @compNatureId IS NULL
GROUP BY nfv.Company_id