表变量和临时表

--表变量和临时表
-----------------------------------
--1. 临时表 (大数据量时适合用临时表) :在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table
 CREATE  TABLE   #Tmp (ID INT IDENTITY PRIMARY NOT NULL, WorkNo VARCHAR(50)) --创建临时表
 SELECT * FROM #Tmp  --查询临时表 
 INSERT INTO #Tmp VALUES()  
 INSERT INTO #Tmp SELECT ADDR FROM MyTable
 TRUNCATE TABLE #Tmp   --清空临时表所有数据和约束 TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少
    DROP TABLE #Tmp

 --可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。
 --本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。
 --除非使用 DROP TABLE 语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去: 
 --当存储过程完成时,将自动除去在存储过程中创建的本地临时表

--2.表变量:尽可能使用表变量而不使用临时表。表变量是一种特殊的数据类型
 -- TABLE 变量有以下优点
 --·TABLE 变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。
 --在其作用域内,TABLE 变量可像常规表那样使用。该变量可应用于 SELECT、INSERT、UPDATE 和 DELETE 语句中用到表或表的表达式的地方。
 --但是,TABLE 不能用在下列语句中:
 --  INSERT INTO table_variable EXEC 存储过程。
 --  SELECT select_list INTO table_variable 语句。
 --在定义 table 变量的函数、存储过程或批处理结束时,自动清除 table 变量

  DECLARE @tb TABLE(ID INT PRIMARY KEY , [Name] VARCHAR(100))
  INSERT INTO @tb SELECT MyName FROM MyTable

posted on 2010-09-16 22:51  牛虻  阅读(411)  评论(0编辑  收藏  举报

导航