创建 临时 表 ?????? 方法一: ???? create table # 临时 表名(字段1 约束条件, ??????????????????????字段2 约束条件, ??????????????????.....) ????????create table ## 临时 表名(字段1 约束条件, ??????????????????????????字段2 约束条件, ?????????
创建 临时 表
?????? 方法一:
???? create table # 临时 表名(字段1 约束条件,
??????????????????????字段2 约束条件,
??????????????????.....)
????????create table ## 临时 表名(字段1 约束条件,
??????????????????????????字段2 约束条件,
??????????????????????.....)
????????方法二:
???? select * into # 临时 表名 from 你的表;
?????? select * into ## 临时 表名 from 你的表;
注:以上的#代表局部 临时 表,##代表全局 临时 表
查询 临时 表
???? select * from # 临时 表名;
?????? select * from ## 临时 表名;
删除 临时 表
???? drop table # 临时 表名;
?????? drop table ## 临时 表名;
?
?
?
SQL SERVER 临时 表的使用
drop table #Tmp?? --删除 临时 表#Tmp
create table #Tmp -- 创建 临时 表#Tmp
(
??? ID?? int IDENTITY (1,1)???? not null, -- 创建 列ID,并且每次新增一条记录就会加1
??? WokNo??????????????? varchar(50),??
??? primary key (ID)????? --定义ID为 临时 表#Tmp的主键?????
);
Select * from #Tmp??? --查询 临时 表的数据
truncate table #Tmp --清空 临时 表的所有数据和约束
相关例子:
Declare @Wokno Varchar(500) --用来记录职工号
Declare @Str NVarchar(4000) --用来存放查询语句
Declare @Count int --求出总记录数?????
Declare @i int
Set @i = 0
Select @Count = Count(Distinct(Wokno)) from #Tmp
While @i ??? Begin
?????? Set @Str = 'Select top 1 @Wokno = WokNo from #Tmp Where id not in (Select top ' + Str(@i) + 'id from #Tmp)'
?????? Exec Sp_ExecuteSql @Str,N'@WokNo Varchar(500) OutPut',@WokNo Output
?????? Select @WokNo,@i --一行一行把职工号显示出来
?????? Set @i = @i + 1
??? End
临时 表
可以 创建 本地和全局 临时 表。 本地 临时 表仅在当前会话中可见;全局 临时 表在所有会话中都可见。
本地 临时 表的名称前面有一个编号符 (#table_name),而全局 临时 表的名称前面有两个编号符 (##table_name) 。
SQL 语句使用 CREATE TABLE 语句中为 table_name 指定的名称引用 临时 表:
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)
如果本地 临时 表由存储过程 创建 或由多个用户同时执行的应用程序 创建 ,则 SQL Server 必须能够区分由不同用户 创建 的表。为此,SQL Server 在内部为每个本地 临时 表的表名追加一个数字后缀。存储在 tempdb 数据库的 sysobjects 表中的 临时 表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地 临时 表指定的表名 table_name 不能超过 116 个字符。
除非使用 DROP TABLE 语句显式除去 临时 表,否则 临时 表将在退出其作用域时由系统自动除去:
当存储过程完成时,将自动除去在存储过程中 创建 的本地 临时 表。由 创建 表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用 创建 此表的存储过程的进程无法引用此表。
所有其它本地 临时 表在当前会话结束时自动除去。
全局 临时 表在 创建 此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个 Transact-SQL 语句的生存周期内保持。换言之,当 创建 全局 临时 表的会话结束时,最后一条引用此表的 Transact-SQL 语句完成后,将自动除去此表。
在 存储过程或触发器中 创建 的本地 临时 表与在调用存储过程或触发器之前 创建 的同名 临时 表不同。如果查询引用 临时 表,而同时有两个同名的 临时 表,则不定义针对哪 个表解析该查询。嵌套存储过程同样可以 创建 与调用它的存储过程所 创建 的 临时 表同名的 临时 表。嵌套存储过程中对表名的所有引用都被解释为是针对该嵌套过程所 创建 的表,例如:
CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO
下面是结果集:
(1 row(s) affected)
Test1Col???
-----------
1??????????
(1 row(s) affected)
Test2Col???
-----------
2??????????
当 创建 本地或全局 临时 表时,CREATE TABLE 语法支持除 FOREIGN KEY 约束以外的其它所有约束定义。如果在 临时 表中指定 FOREIGN KEY 约束,该语句将返回警告信息,指出此约束已被忽略,表仍会 创建 ,但不具有 FOREIGN KEY 约束。在 FOREIGN KEY 约束中不能引用 临时 表。
考虑使用表变量而不使用 临时 表。当需要在 临时 表上显式地 创建 索引时,或多个存储过程或函数需要使用表值时, 临时 表很有用。通常,表变量提供更有效的查询处理。