局部临时表

时间:2014-09-19 17:32:05   收藏:0   阅读:133

  局部临时表有两个特点,一是表名以‘#‘号作为前缀,二是它只对创建它的会话在创建级和调用堆栈内部级(包括内部的过程,函数,触发器和动态批处理)可见。局部临时表的应用场景是,当需要把中间结果临时保存起来,以便供以后查询这些临时数据的时候使用。下面是创建局部临时表的示例代码。

USE TSQLFundamentals2008;
GO

-- 局部临时表
IF OBJECT_ID(tempdb.dbo.#MyOrderTotalsByYear,U) IS NOT NULL DROP TABLE dbo.#MyOrderTotalsByYear;
GO

-- 创建局部临时表
SELECT YEAR(orders.orderdate) AS orderyear,SUM(orderDetails.qty) AS qty 
INTO dbo.#MyOrderTotalsByYear
FROM Sales.Orders AS orders
LEFT JOIN Sales.OrderDetails AS orderDetails ON orders.orderid = orderDetails.orderid
GROUP BY YEAR(orders.orderdate);

-- 在当前会话中,从局部临时表中查询数据
SELECT * FROM dbo.#MyOrderTotalsByYear;

查询结果:

bubuko.com,布布扣

为了演示局部临时表对其它会话不可见,我现在新开一个查询窗口,然后用同样的查询语句去查,看会有什么样的结果?

USE tempdb;
GO

-- 新打开一个查询窗口
SELECT * FROM dbo.#MyOrderTotalsByYear;

这时程序报错了,错误消息如下图。

bubuko.com,布布扣

这表明局部临时表的确只对当前会话可见。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!