如何使SSRS适用于多个用户

时间:2015-10-13 16:29:31

标签: sql-server sql-server-2005 reporting-services

我找不到任何相关内容,所以我认为我没有问这个问题,但这是我的情况。我有一个存储过程,最终用户传递过滤条件列表,因为我不知道过滤条件是什么,我使用动态SQL。此外,为了允许多个用户同时运行存储过程,我使用了所有动态命名的临时表,因此不会发生冲突。一切正常。

现在我的问题是如何输出报告。现在我有一个SSRS报告指向存储过程将其输出转储到的单个数据库。存储过程完成后,将显示报告。这适用于一个用户,但如果两个用户同时运行存储过程,我无法知道哪些输出数据将显示在报告上。使问题复杂化的是动态用户过滤条件可以极大地影响存储过程完成所需的时间。我可以看到报表加载数据就像其他存储过程会话截断或将数据加载到输出表一样。

我可以排队请求并一次运行一个请求,但理想情况下我希望它们能够同时运行,因为多个用户必须在每个月初多次运行此报告。有没有办法确保报告中显示给最终用户的数据与用户运行的存储过程会话的数据输出相匹配。

编辑:

以下内容并非要求,但为了澄清现在如何运作,最终用户访问网站,在一些文本框中输入一些过滤条件,每个可过滤数据库字段一个,使用第三方搜索他们已经知道的通配符格式。然后我接受该输入,将其清理并将其解析为SQL WHILE字符串,然后将其传递给获取数据的存储过程。当存储过程完成时,控制权将传递回网站,然后将该报告显示为嵌入对象。所以网站正在调用解析方法,存储过程和报告。

2 个答案:

答案 0 :(得分:1)

SQL Server将为每个报表用户创建一个单独的会话。然后它将在其自己的会话中调用存储过程(SQL Server是一个多会话产品),并使用所选参数将运行proc并生成唯一结果,然后将其传递回调用它的报表用户,报表将然后显示给用户。如果十个用户同时使用唯一参数调用报表,则每个用户将在报表正文中看到不同的报表。

答案 1 :(得分:0)

我最终改变了整个事情,正如本杰明建议的那样,它工作正常,但这真的不是我想要的答案。我终于在研究其他东西时偶然发现了它。您可以设置报表查看器的DataSources.Add()方法来添加自己的数据集。这将允许我在网页中运行存储过程,这样我就可以在网页级别捕获并处理错误,这样我就可以向最终用户提供更多有用的反馈。您可以查看此其他帖子setting the datasource for a local report net report viewer以获取更多详细信息。

该示例适用于本地报告,但我能够将其用于远程报告,但我在一个受信任的内部唯一网络上。据我了解,您也可以使用较新的报表查看器。