我多年来一直在标准T-SQL编码中使用#temp表,并认为我理解它们。 但是,我被拖入了一个基于MS Access的项目,利用传递查询,并发现一些让我感到困惑的事情。 虽然也许这是我的愚弄的内部运作方式!?
我们开始:在正常使用情况下,我理解如果我在Sproc中创建临时表,它的范围以SProc的结尾结束,并且默认情况下被删除。
在Access示例中,我发现可以在一个Query中执行此操作:
从dbo.myTable
中选择top(10)*到#myTemp
然后在第二个单独的查询中:
从#myTemp
中选择*
这怎么可能? 如果临时表因当前会话而死,这是否意味着Access保持单个会话打开,并将该会话用于所有执行的查询?
或者我对范围的基本理解一直都是错误的吗?
希望有人可以帮助澄清引擎盖下发生的事情!
非常感谢
答案 0 :(得分:1)
我找到了一个类似问题的this答案:
临时表存储在tempdb中,直到连接被删除(或者在使用它的最后一个连接被删除时的全局临时表的情况下)。你也可以(并且这是一个很好的方法)当你使用drop table语句完成它后,手动删除表。
我希望这会有所帮助。