临时表有两种类型:本地表和全局表。它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号(#)打头;它们仅对当前的用户连接可见的;当用户从Sql Server实例断开连接时被删除。全局临时表的名称以两个数字符号(##)打头,创建后对任何用户都是可见的,当所有引用该表的用户与服务器断开连接时被删除。
例如,创建temp表,则任何在数据库中有使用该表的安全权限的用户都可以使用该表。除非已将其删除。如果数据库回话创建了本地临时表#temp,则仅回话可以使用该表,会话断开连接后将该表删除,如果创建了全局临时表##temp,则数据库中的任何用户均可使用该表,如果该表在创佳后没有其他用户使用,则当断开连接时该表删除。如果用户创建该表后另一个用户在使用该表,则数据库引擎将在用户断开连接并且所有其他会话不在使用该表时将其删除。
例如,下面语句创建了一个临时表,并向其中插入数据。
Create Table #Mytable (ID int primary key)
insert into #Mytable vlaues (1)
当创建本地或全局临时表,Create Table 语法支持除 foreign key 约束外的其他所有约束定义,如果临时表中指定了 Foreign Key 约束,则该语句将返回一条表名已跳过此约束的警告消息。此表仍将创建,但不适用Foreign Key约束