zoukankan      html  css  js  c++  java
  • 关于临时表和表变量的差别2

    又是想到什么写什么系列……上次 http://www.cnblogs.com/Gin-23333/p/5096638.html 写了一下,今天补充点其它的

    1、在事务里面的影响,临时表可以被回滚 而表变量是不能回滚的。简单的例子

    DECLARE @T AS TABLE(
    ID INT,
    Name NVARCHAR(50)
    )
    IF OBJECT_ID('tempdb..#T') IS NOT NULL
        DROP TABLE #T
    CREATE TABLE #T (
    ID INT,
    Name NVARCHAR(50)
    )
    
    BEGIN TRAN
        INSERT INTO @T
                ( ID, Name )
        VALUES  ( 1,N'Col1' );
    
        INSERT INTO #T
                ( ID, Name )
        VALUES  ( 1,N'Col1' );
    
    ROLLBACK
    
    SELECT * FROM @T
    SELECT * FROM #T
    
    @T
    ID          Name
    ----------- --------------------------------------------------
    1           Col1
    
    #T
    ID          Name
    ----------- --------------------------------------------------

    2、临时表定义好之后可以通过DDL语句修改结构,但是表变量就不行了

    DECLARE @T AS TABLE(
    ID INT PRIMARY KEY,
    Name NVARCHAR(50)
    )
    
    IF OBJECT_ID('tempdb..#T') IS NOT NULL
        DROP TABLE #T
    
    CREATE TABLE #T (
    ID INT PRIMARY KEY,
    Name NVARCHAR(50)
    )
    
    ALTER TABLE #T ADD Col1 nvarchar(50);
    SELECT * FROM #T
    ALTER TABLE @T1 ADD Col1 nvarchar(50);
    SELECT * FROM @T

    消息 102,级别 15,状态 1,第 16 行
    “@T1”附近有语法错误。
    消息 102,级别 15,状态 1,第 16 行
    “Col1”附近有语法错误。

    3、临时表可以定义外键,但是表变量是不行的(这里代码就不写了╮(╯_╰)╭,)

    4、临时表可以创建索引,表变量是不行的,所以中间缓存结果会比较大的时候,可以适当使用临时表创建索引来进行优化。

    5、表变量不维护统计数据。这意味着任何表变量数据更改都不会引起相关查询语句进行重编译

    6、表变量可以引用用户自定义数据类型,临时表并不能,因为临时表引用的是tempdb,而里面并没有定义该用户自定义类型。

    暂时想到这么多╮(╯_╰)╭,如果想到新的东西再分享

  • 相关阅读:
    errorC4430解决办法(vs2013)
    c++获取系统当前时间写入txt文件
    黑苹果安装记录(史上最简单的安装教程——小白福利)
    运行vs生成的exe出现应用程序无法正常启动(0x000007b)解决方案(亲测有效)
    数据可视化工具grafans,忘记密码恢复默认admin(基本使用教程)
    opencv任意形状角度透视变换(代码分析清晰)
    opencv两张规格一样的图片拼接(纵向和横向)
    linux3
    linux2
    linux1
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/5098819.html
Copyright © 2011-2022 走看看