2012-08-10 60 views
0

我想在SSRS中创建一个接受来自用户的SQL查询(可以是字符串)的报告,然后执行它并显示结果。 我试图创建与下面的查询SRSS在用户定义的查询中生成报告

SELECT @select 
FROM @from 
WHERE @ where 

的报告,并计划显示3个文本框的用户得到每个输入。但是这在创建报告本身时给了我错误。
任何建议要做到这一点?

+0

也许你应该使用报表生成器http://technet.microsoft.com/en-us/bi/ff657833.aspx – 2012-08-10 05:46:21

+0

不是一个真正理想的设置方法。 http://xkcd.com/327/ – SarekOfVulcan 2012-08-10 13:25:58

+0

不错的@SarekOfVulcan。但我会给其他用户的只读权限。我猜测有一些方法来设置这些权限。 – Venom 2012-08-10 17:03:02

回答

1

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

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

这种方法的问题是,报告服务将查询解析为一组,然后在报表布局定义字段。如果您可以保证每次执行查询时具有相同数量的字段,并且您可以使用别名(column_1,column_2等)将列名转换为通用列名,那么您可以创建一个报告布局显示查询的结果。我非常怀疑在Select参数中要输入列名的任何人想要输入(或知道键入)columnA作为column_1,columnB作为column_2等,但我可能是错的。更大的问题是您无法验证每次使用正确的列数。我想你可以在报告中写一个自定义函数,并根据需要填写额外的列。因此,如果构建报表以显示5列但只提供了3列,则可以解析Select参数并添加“null作为column_4,null作为column_5”,或者相反将列数截断为一组5输入10.对于这个问题,如果你添加一个自定义函数,你可以接受来自用户的列列表,然后通过在通用列名称中添加之后重写字符串。

您还有一个问题验证每个参数中的用户输入 - 但您可以再编写一个自定义函数来处理这个问题。底线是它不是微不足道的,也不是真正意义上的SSRRS的使用方式。但是,如果你投入足够的工作,可能有办法让它做你想做的事。