`
aaron_ch
  • 浏览: 178198 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

SQL Server Temp Table

阅读更多
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 < @Count
    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 约束中不能引用临时表。

考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理。


临时表的应用
    1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。

2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。

临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用。数据处理比较复杂的时候临时表快,反之视图快点。
分享到:
评论

相关推荐

    sql server 直接读取excel

    CREATE TABLE #tempTable (Column1 datatype, Column2 datatype, ...); INSERT INTO #tempTable EXEC sp_executesql @sql, N'@connStr NVARCHAR(MAX)', @connStr; ``` 5. **注意事项**: - Excel文件大小和...

    sqlserver sql语法大全

    ### SQLServer SQL语法大全 #### 创建数据库 在SQL Server中创建数据库是一项基本操作,通过`CREATE DATABASE`命令来实现。创建数据库时可以指定文件和日志文件的位置、初始大小及增长方式等参数。 **语法示例:**...

    Sqlserver 自定义函数 Function使用介绍

    SQL Server中的自定义函数是数据库开发中非常重要的组成部分,它们允许开发者创建自定义的逻辑,以便在查询中重用和简化复杂操作。本篇主要关注SQL Server 2008中的三种自定义函数:标量函数、内联表值函数和多语句...

    SQLServer逗号分隔的字符串转换成表

    SQL Server 逗号分隔的字符串转换成表 SQL Server 逗号分隔的字符串转换成表是指将一个逗号分隔的字符串转换成一个表结构,以便于进行查询、更新或者删除等操作。下面是将逗号分隔的字符串转换成表的步骤: 1. ...

    SQL Server遍历表中记录的2种方法(使用表变量和游标)

    DECLARE @temp TABLE (id INT IDENTITY(1, 1), Name VARCHAR(10)); DECLARE @tempId INT, @tempName VARCHAR(10); -- 插入数据 INSERT INTO @temp VALUES ('a'), ('b'), ('c'), ('d'), ('e'); -- 使用WHILE循环和...

    sqlserver转PG经验总结及PG的一些特性

    - **创建临时表**:在 SQL Server 中可以使用 `select * into #temp_table from table` 创建临时表,在 PostgreSQL 中则需使用 `create temp table temp_table on commit drop as select * from table`。 - **异常...

    mssql sqlserver 使用sql脚本实现相邻两条数据相减.docx

    MSSQL SQL Server 使用 SQL 脚本实现相邻两条数据相减 MSSQL SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业和领域。有时,我们需要对数据库中的数据进行操作,例如计算相邻两条数据的差异。在本文中...

    Sql server 存儲過程技巧

    SET @sql = N'CREATE TABLE ##TempTable (ID INT, Name NVARCHAR(50))' EXEC sp_executesql @sql ``` #### 四、在存储过程中使用临时表和游标的注意事项 在复杂的商业逻辑中,临时表和游标经常被用来作为中间数据...

    SqlServer与Oracle差异

    - Sql server使用`SELECT * INTO #temptable FROM existed table`创建临时表。 4. **查询方面** - 获取表的前N行记录: - Oracle使用`rownum`,如`SELECT * FROM table_name WHERE rownum 。 - Sql server使用`...

    SQL server 与Oracle开发比较

    - 两者在修改表结构时,如增加、删除列的语法基本相同,但在某些细节上有区别,如SQL Server的ALTER TABLE语句与Oracle的MODIFY语句。 - Oracle提供了一个UNUSED选项来标记不再使用的列,而SQL Server通常直接删除...

    sql server经典面试题

    2. SQLServer中复制表 - 只复制表结构:可以使用`SELECT * INTO new_table FROM old_table WHERE 1&lt;&gt;1`或`SELECT TOP 0 * INTO new_table FROM old_table`。 - 复制表结构与内容:直接`SELECT * INTO new_table ...

    Ruby-SQLServerRailsActiveRecord的SQLServer适配器

    此外,`activerecord-sqlserver-adapter`还处理了一些特定于SQL Server的功能,如存储过程、temp tables和视图。例如,你可以定义一个模型来代表存储过程,并调用它: ```ruby class MyProcedure self.primary_...

    SQL Server FOR XML PATH 语句的应用

    FROM @TempTable FOR XML PATH('row'); ``` 执行以上查询后,将会得到如下所示的XML数据: ```xml &lt;UserID&gt;1 &lt;UserName&gt;a &lt;UserID&gt;2 &lt;UserName&gt;b ``` #### 自定义元素名称 除了使用默认的`'row'`外,还...

    SQL SERVER 数据库 管理与应用

    ### SQL Server 数据库管理与应用 #### 一、SQL Server 数据库概述 SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),它提供了一系列的功能和服务,旨在帮助企业级用户管理和处理大量的数据。SQL ...

    轻松消除SQL SERVER重复记录

    然后,我们将`Products`表中的数据插入到`Products_temp`表中,SQL Server会自动忽略重复的记录,并给出提示。 ```sql INSERT INTO Products_temp SELECT * FROM Products ``` **步骤四:更新原表并删除临时表** ...

    SQLServer数据库实用语法

    ### SQL Server 数据库实用语法详解 #### 一、存储过程创建与使用 在 SQL Server 数据库管理系统中,存储过程是一种预编译的 SQL 代码集合,它可以被当作一个单独的对象来调用,从而提高应用程序的执行效率并简化...

    在SQL Server 2005中连接Oracle,完成查询、插入操作

    假设我们有一个名为`tempTable`的临时表,想要将数据插入Oracle的`myOracleTable`: ```sql INSERT INTO OPENQUERY(OracleLink, 'INSERT INTO schema.myOracleTable (column1, column2) VALUES (?, ?)') SELECT ...

    SQLServer中数据加密方法

    CREATE TABLE #tempTable (iOrder INT, pswd VARBINARY(1024)); INSERT INTO #tempTable VALUES (1, pwdencrypt('yang')); INSERT INTO #tempTable VALUES (2, pwdencrypt('lian')); INSERT INTO #tempTable ...

    sqlserver切割字符窜的函数

    ### SQL Server 字符串分割函数实现 在处理SQL Server中的数据时,经常需要对字符串进行分割操作以提取有用的信息。本文将详细介绍一个SQL Server自定义函数`f_split`,该函数能够有效地帮助用户完成字符串分割任务...

    sql server2008性能参数获取语句

    根据给定的信息,本文将详细解释SQL Server 2008中的性能参数获取语句,主要涉及以下几个方面:SQL Server 2008的服务内存管理、全表扫描操作、以及死锁检测。 ### 一、SQL Server 2008服务内存管理 #### 1.1 内存...

Global site tag (gtag.js) - Google Analytics