admin

本地与全局临时表-何时使用什么?

sql

我有一个报告,该报告在执行时使用my_report_user用户名连接到数据库。该报告可以有很多最终用户。并且在每次执行中都会建立与数据库的新连接my_report_user(没有连接池)

我有一个结果集,我认为它只能创建一次(可能在报表的第一次运行中),而其他报表执行则可以重复使用这些东西。基本上,每个报表执行都应检查此结果集(存储为临时表)是否存在。如果不存在,则创建该结果集,否则仅重用可用的结果集。

我应该使用local临时表(#)还是global临时表(##)?

有没有人尝试过这些东西,如果是,请让我知道我应该关心的所有事情吗?(几乎同时运行报表等)

编辑:我正在使用Sql Server 2005


阅读 166

收藏
2021-07-01

共1个答案

admin

两者都不

如果要在自己的控制下缓存结果结果集,则不能使用任何类型的临时表。您应该使用存储在tempdb中甚至具有自己的结果集缓存数据库的普通用户表。

临时表,bot #local和## shared的生存期由连接控制。如果您的应用程序断开连接,则临时表将被删除,这与您所描述的不兼容。

真正的难题将是在并发运行下填充这些缓存的结果集,而不会混淆(最后得到的结果集包含来自并发报告运行的重复项,而这两个都被认为是“第一次”运行)。

附带说明,SQL Server Reporting
Services已开箱即用。您可以缓存和共享数据集,也可以缓存和共享报表,它已经可以使用并且已经为您测试。

2021-07-01