我有在执行连接到与数据库中的报表my_report_user
用户名。 有可能是该报告的许多最终用户。 而在每次执行到数据库的新连接将进行my_report_user
(没有连接池)
我有一个结果集,我认为可以只创建一次(可能是在报告的第一次运行)和其他报告的执行可以只重用的东西。 基本上每个报告执行应该检查此结果集(存储为临时表)是否存在。 如果它不存在,然后创建一个结果集,否则只是重用什么用。
我应该使用local
临时表(#)或global
临时表(##)?
有没有人尝试这样的东西,如果是的话,请让我知道所有的事情我应该关心? (几乎同时报告运行等)
编辑:我使用的SQL Server 2005中
也不
如果你希望缓存自己的控制下,结果的结果集,那么你可以不使用临时表,任何一种。 您应该使用普通用户表,无论是存储在tempdb中,甚至有自己的结果集缓存数据库。
临时表,BOT #local自和##共享具有由连接(一个或多个)控制的寿命。 如果您的应用程序断开连接,临时表被删除,而这不符合你的描述很好地工作。
真正的困难prolem将(从concurent运行报告,无论是认为“第一个”运行结束了含有重复项目的结果集)来填充下concurent运行这些缓存的结果集,而不会混合的东西了。
作为一个方面说明SQL Server报表服务已经这样做外的开箱。 您可以缓存和共享数据集,你可以缓存和共享报表,它已经工作,并为您进行了测试。
我觉得#TEMP表可以在某些情况下是有用的,但不是最好的做法。 我还没有找到全球##临时表的有效使用,无论是在我自己的工作,或其他任何人的工作谁写他们。 我能想到的唯一情况是BCP或需要建立一个临时数据存储,然后在一些后续步骤检索等外部进程。 在这种情况下,我宁愿使用永久表与某种键和一个后台进程处理的清理。
这听起来像你正在进入一个OLTP模式现在。 数据库仓储读了一定会帮助你。