我们这里有一个大型查询,它有几个参数,对于每个参数,查询只有where
子句的一部分不同,如下所示:
CASE WHEN @IncludeNames = 1 AND @NameFilter IS NULL THEN
(SELECT blah FROM blahBlah
INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
WHERE blahBlah.Id = x.Id)
WHEN @IncludeNames = 1 AND @NameFilter IS NOT NULL THEN
(SELECT blah FROM blahBlah
INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
WHERE blahBlah.Id = x.Id
AND table2.Id = @NameFilter
对于几个实例,它继续发生,仅在where子句上有一个条件。
请记住,这是一个更大的选择。
有没有一种很好的方法来清理它,而不是将它全部放在一个大的连接的sql字符串中并在其上运行exec
,或者使用像每个块的多个存储过程那样荒谬的东西,如下所示:{{ 3}}
服务器是SQL Server 2008 R2。 TIA!
答案 0 :(得分:2)
尝试使用每个子句的全部或特定值选项设置查询,例如
SELECT x.*
FROM x
WHERE (x.id = @NameFilter
OR @NameFilter is null)
AND (x.typeId = @typeFilter
OR -1 = @typeFilter)
AND (x.date = @date
OR @date is null)
AND (x.someStingType = @someStringType
Or '' = @someStringType)
这应该允许您将子句连接到单个select语句中。每个参数都可以应用过滤器或没有效果(如果设置为默认值,例如null,空字符串或-1)。