如何编写带有可选参数的SQL查询?

问题描述

| 我正在使用sql Server Reporting Services进行一些报告。 我有一些报告,其中过滤器是可选的。 例如,..假设您有书籍报告。最终用户可以选择不指定,不指定作者,也可以不指定作者。 我不相信我可以在查询中加入IF {}语句吗? 在sql Server Reporting Services中是否有建议或最佳方法? 谢谢!     

解决方法

您可以在任何需要条件的地方进行此操作。
WHERE ((:param0 IS NULL) OR (column_name0 = :value0)) 
  AND ((:value1 IS NULL) OR (column_name1 = :value1)) 
  AND...
如果不想使用Null,则将其传递给参数。 在SSRS中,您需要在SSRS中将参数默认设置为NULL ...有关更多详细信息,请参见此处     ,很难看到您已经编写的整个过程,但是通过使用语句
IN
,您可以在
WHERE
子句中拥有多个值, 例如:
SELECT
    *
FROM
   BOOKS 
WHERE
   AUTHOR IN (\'AUTHOR1\',\'AUTHOR2\',...)
如果愿意,可以使用单个定界符(例如
VARCHAR(MAX)
TEXT
)在作者列表中提供所有内容,方法是使用集合定界符,然后在
WHERE
子句中使用拆分功能。显然,如果此参数为空或“ 7”,则该过程将返回所有书籍。 可能还有其他方法,但这对我有用。     ,一种解决方案是将请求的作者推入登台表并从中进行查询。
Select ...
From books
Where Exists    (   
                Select 1
                From author_staging As S
                Where S.author = books.author
                )
如果期望的行为是在未选择任何作者的情况下退还所有书籍,则可以执行以下操作:
Select ...
From books
Where Exists    (   
                Select 1
                From author_staging As S
                Where S.author = books.author
                Union All
                Select 1
                From ( Select 1 As Value ) As Z
                Where Not Exists    (
                                    Select 1
                                    From author_staging As S1
                                    )
                )
或其他形式:
Select ...
From books
Where Exists    (   
                Select 1
                From author_staging As S
                Where S.author = books.author
                )
    Or Not Exists   (
                    Select 1
                    From author_staging As S1
                    )