加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sqlserver 中临时表和全局临时表

发布时间:2020-12-12 15:21:24 所属栏目:MsSql教程 来源:网络整理
导读:SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。 临时表有两种类型:? 本地临时表? 以一个井号 (#) 开头

SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。

临时表有两种类型:?

本地临时表?
以一个井号 (#) 开头的那些表名。只有在创建本地临时表的连接上才能看到这些表。

全局临时表?
以两个井号 (##) 开头的那些表名。在所有连接上都能看到全局临时表。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。
==========================================================================

SQL code
   
   
    
    
    
     
    
    --
    
    应用本地临时表
    
     
    
    declare
    
     
    
    @sql
    
     
    
    varchar
    
    (
    
    100
    
    ) 
    
    set
    
     
    
    @sql
    
    =
    
    '
    
    select 
    
    ''
    
    123
    
    ''
    
     as a,
    
    ''
    
    abasdf
    
    ''
    
     as b into #t
    
    '
    
     
    
    exec
    
    (
    
    @sql
    
    ) 
    
    select
    
     
    
    *
    
     
    
    from
    
     #t 
    
    go
    
     
    
    /*
    
    发现不能正确显示临时表的数据 提示: 服务器: 消息 208,级别 16,状态 1,行 5 对象名 '#t' 无效。 
    
    */
    
     
    
    --
    
    修改为全局临时表
    
     
    
    declare
    
     
    
    @sql
    
     
    
    varchar
    
    (
    
    100
    
    ) 
    
    set
    
     
    
    @sql
    
    =
    
    '
    
    select 
    
    ''
    
    123
    
    ''
    
     as a,
    
    ''
    
    abasdf
    
    ''
    
     as b into ##t
    
    '
    
     
    
    exec
    
    (
    
    @sql
    
    ) 
    
    select
    
     
    
    *
    
     
    
    from
    
     ##t 
    
    drop
    
     
    
    table
    
     ##t 
    
    go
    
     
    
    /*
    
    可以正确显示临时表的数据 
   
   


分析原因:exec(@sql) 相当于重新建立一个数据库对话,所以对于本地临时表,使用exec(@sql)创建临时表,
在exec外部不能正确访问;而使用全局临时表就ok了
*/?

SQL code
   
   
    
    
    
    exec
    
     (
    
    '
    
    select top 10 * into ##temp from syhouse
    
    '
    
    ); 
    
    exec
    
     (
    
    '
    
    select * from ##temp
    
    '
    
    ); 
   
   

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读