问题描述
如果要在自己的控制下缓存结果结果集,则不能使用任何类型的临时表。您应该使用存储在tempdb中甚至具有自己的结果集缓存数据库的普通用户表。
临时表,bot #local和## shared的生存期由连接控制。如果您的应用程序断开连接,则临时表将被删除,这与您所描述的不兼容。
真正的难题将是在并发运行下填充这些缓存的结果集,而不会混淆(最后得到的结果集包含来自并发报告运行的重复项,而这两个都被认为是“第一次”运行)。
附带说明,sql Server Reporting Services已开箱即用。您可以缓存和共享数据集,也可以缓存和共享报表,它已经可以使用并且已经为您测试。
解决方法
我有一个报告,该报告在执行时使用my_report_user
用户名连接到数据库。该报告可以有很多最终用户。并且在每次执行中都会建立与数据库的新连接my_report_user
(没有连接池)
我有一个结果集,我认为它只能创建一次(可能在报表的第一次运行中),而其他报表执行则可以重复使用这些东西。基本上,每个报表执行都应检查此结果集(存储为临时表)是否存在。如果不存在,则创建该结果集,否则仅重用可用的结果集。
我应该使用local
临时表(#)还是global
临时表(##)?
有没有人尝试过这些东西,如果是,请让我知道我应该关心的所有事情吗?(几乎同时运行报表等)
编辑:我正在使用Sql Server 2005