临时表和永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除。

    临时表有两种:本地临时表和全局临时表。

    它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号(#)开头;它们仅对当前的用户连接是可见的;当用户从SQL SERVER实例断开连接时被删除。全局临时表的名称以两个数字字符号(##)开头,创建后对任何用户都是可见的,当所有引用该表的用户从SQL SERVER断开连接时被删除。

     1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。
     2、全局临时表(##开头)对其它连接也有效,在当前连接和其他连接访问过它的连接都断开时自动删除。
     3、不管局部临时表还是全局临时表,只要连接有访问权限,都可以用drop table tablename 来显式删除临时表。

      if(object_id('tempdb..##全局临时表') is not null)
          drop table ##全局临时表
      else
          create table ##全局临时表

       drop table #局部临时表
       create table #局部临时表

     当创建本地或全局临时表时,create table语法支持除foreign key 约束意外的其它所有约束定义。如果在临时表中指定foreign key约束,该语句将返回警告信息,指出此约束已被忽略,表仍会创建,但不具有foreign key 约束。在foreign key约束中不能引用临时表。考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理。

      如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,为区分不同用户创建的表,SQL Server在内部为本地临时表的表名追加一个数字后缀。存储在tempdb数据库的sysobjects表中的临时表,其全名由create table语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名table_name不能超过116个字符。