SRSS生成有关用户定义查询的报告

时间:2012-08-10 05:08:01

标签: sql sql-server-2008-r2 ssrs-2008

我想在SSRS中创建一个报告,它接受来自用户的SQL查询(可能是一个字符串),然后执行它并显示结果。 我尝试使用以下查询创建报告

SELECT @select
FROM @from
WHERE @ where

并计划向用户显示3个文本框以获取每个输入。但这在创建报告时给了我错误。
有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以将数据集设置为使用表达式而不是硬编码查询,但您需要使用嵌入式数据源而不是共享数据源。使用嵌入数据源时,单击fx按钮(表达式按钮)以放入作为SQL查询解析的表达式。您可以在以下表达式中使用从用户捕获的三个参数:

="select " + @select + " from " + @from + " where " + @where

此方法的问题在于Reporting Services将查询解析为一组字段,然后在报表布局中定义这些字段。如果您可以在每次执行查询时保证相同数量的字段,并且您可以使用别名(column_1,column_2等)将列名转换为通用列名,那么您可以创建一个报表布局显示查询结果。我非常怀疑谁会在Select参数中输入列名,他们想要输入(或知道输入)columnA作为column_1,columnB作为column_2等,但我可能是错的。更大的问题是您无法验证每次都使用正确的列数。我想你可以在报告中编写一个自定义函数,并在需要时填写额外的列。因此,如果您构建报告以显示5列但它们仅提供3,则可以解析Select参数并添加“null as column_4,null as column_5”,或相反地将列数截断为5的集合如果添加自定义函数,则可以接受用户的列列表,然后通过添加通用列名重写字符串。

在每个参数中验证用户输入时也存在问题 - 但是您可以再次编写自定义函数来处理此问题。最重要的是,它不是微不足道的,也不是SSRRS打算使用的方式。但如果你投入足够的工作,可能有办法让它做你想做的事。