有时需要把数据临时保存到表中,而且在某些情况下,你可能并不想使用永久性的表。例如,假设你需要让数据只对当前会话有效,或者甚至只对当前批处理有效。
在这种情况下,使用临时表会更方便,SQL Server支持三种临时表:局部临时表,全局临时表,表变量。
SELECT *
INTO #T_Order
FROM T_Order
局部临时表
要创建局部临时表,只需要在命名时以单个数字符号(#)作为前缀,例如#T1。所有三种类型的临时表都是在tempdb数据库中创建的。
只有在创建会话的SQL Server实例断开时,SQL Server才会自动断开它。
SELECT *
INTO ##T_Order
FROM T_Order
可以使用临时表的场合是:当你的处理需要把中间的结果集临时保存起来(如在一个循环中),以便以后的查询这些临时数据。
另一个查询是需要多次访问某个开销昂贵的处理结果。
全局临时表
如果创建的全局临时表,则它对其他所有会话可见。
当创建临时表的会话断开数据库的联接,而且也没有活动在引用全局临时表时,SQL Server会自动删除相应的全局临时表 。要创建临时表,只需要在命名时用(##)作为前缀,如##T1。
表变量
声明表变量的方式和声明其他变量类似,使用的都是DECLARE语句。
从性能上考虑,对于少量数据(只有几行),使用表变量更有意义,否则,应该使用临时表。
DECLARE @T_Order table(
ID int,
Name varchar(50)
)
INSERT INTO @T_Order(ID,Name)
SELECT OrderID,Name
FROM T_Order
INSERT INTO @T_Order(ID,Name)
VALUES(100,'微波炉')