【发布时间】:2016-04-20 18:45:24
【问题描述】:
目前我们有一个查询可以预测直接借记产品的收入。此查询使用永久表而不是临时表,因为查询使用动态 SQL,并且在动态 SQL 执行范围之外无法看到临时表。
我想要做的是使用全局临时表将它们放入存储过程中,以解决临时表超出范围的问题。我的问题是,如果它们永远不会并行运行,并且只有在存储过程像普通临时表一样运行后才会按顺序删除这些全局临时表?还是因为它们是全局的,所以它们会留在 tempdb 中?
另外请注意,我已经研究过 insert into table 方法,但遗憾的是,根据我下面的评论,我们使用大约 1000 个表来创建最终输出。
【问题讨论】:
-
全局临时表有替代方案,比如使用
insert . . . exec。您可能需要考虑其他解决方案。 -
您好,我无法这样做,这会很复杂。查询本身会为一年中的每个月生成一个表,其中包含 12 年的先前收入。然后我们有 7 个不同的产品线,所以 7 *12 *12 所以很多小桌子。可悲的是,这是我继承的东西,而不是我自己创造的。
-
我在某处读到过(不记得了):如果您创建一个全局临时表,则该表仅可用于其他会话,直到您的连接处于活动状态。如果您断开连接并且没有人正在从该表读取数据,则该表将丢失。这意味着如果您断开连接,任何正在读取表格的人都将成功完成他的操作,并且在所有其他会话没有对表格做任何事情之后表格将立即下降。我已经测试过了,这是真的。
标签: sql sql-server-2008 stored-procedures dynamic-sql global-temp-tables