• 表变量和临时表自定义类型的区别


    表变量用自定义类型时类型在当前库有效
    临时表用自定义类型时类型在Tempdb库有效

    以下测试3个例子:

    --测试例子1:在Test创建自定义类型SSN
    use tempdb
    go
    if object_id('tempdb..#TestTable') IS NOT NULL 
       DROP TABLE #TestTable;
    if exists (select 1 from sys.types WHERE name = 'SSN') 
       DROP TYPE dbo.SSN;
    go
    use Test
    go
    if exists (select 1 from sys.types WHERE name = 'SSN') 
       DROP TYPE dbo.SSN;
    go
    --在Test创建自定义类型
    CREATE TYPE dbo.SSN 
      FROM CHAR(9) NOT NULL 
    GO
    
    
    RAISERROR('定义表变量成功',10,1) WITH NOWAIT;
    DECLARE @TestTable TABLE (
      RowID INT IDENTITY,
      SSN SSN)
      
    go
    
    RAISERROR('创建临时表失败',10,1) WITH NOWAIT;
    CREATE TABLE #TestTable (
      RowID INT IDENTITY,
      SSN SSN)
      
    /*
    定义表变量成功
    消息 2715,级别 16,状态 7,第 3 行
    第 2 个列、参数或变量: 找不到数据类型 SSN。
    
    */
    
    go
    --测试例子2:在Tempdb创建自定义类型SSN
    
    use Test
    go
    if exists (select 1 from sys.types WHERE name = 'SSN') 
       DROP TYPE dbo.SSN;
    go
    use tempdb
    go
    if object_id('tempdb..#TestTable') IS NOT NULL 
       DROP TABLE #TestTable;
    if exists (select 1 from sys.types WHERE name = 'SSN') 
       DROP TYPE dbo.SSN;
    go
    --在Tempdb创建自定义类型
    CREATE TYPE dbo.SSN 
      FROM CHAR(9) NOT NULL; 
    
    go
    use Test
    go
    
    RAISERROR('定义表变量失败',10,1) WITH NOWAIT;
    DECLARE @TestTable TABLE (
      RowID INT IDENTITY,
      SSN SSN)
    go
    RAISERROR('创建临时表成功',10,1) WITH NOWAIT;
    CREATE TABLE #TestTable (
      RowID INT IDENTITY,
      SSN SSN)
     /*
    消息 2715,级别 16,状态 7,第 3 行
    第 2 个列、参数或变量: 找不到数据类型 SSN。
    创建临时表成功
    
    */
    
    
    go
    
    --测试例子3:同时在Tempdb和Test创建自定义类型SSN
    use tempdb
    go
    if object_id('tempdb..#TestTable') IS NOT NULL 
       DROP TABLE #TestTable;
    if exists (select 1 from sys.types WHERE name = 'SSN') 
       DROP TYPE dbo.SSN;
    go
    CREATE TYPE dbo.SSN 
      FROM CHAR(9) NOT NULL; 
    
    go
    use Test
    go
    if exists (select 1 from sys.types WHERE name = 'SSN') 
       DROP TYPE dbo.SSN;
    go
    CREATE TYPE dbo.SSN 
      FROM CHAR(9) NOT NULL; 
    go
    RAISERROR('定义表变量成功',10,1) WITH NOWAIT;
    DECLARE @TestTable TABLE (
      RowID INT IDENTITY,
      SSN SSN)
    go
    RAISERROR('创建临时表成功',10,1) WITH NOWAIT;
    CREATE TABLE #TestTable (
      RowID INT IDENTITY,
      SSN SSN)
    /*
    定义表变量成功
    创建临时表成功
    */



  • 相关阅读:
    DELLR720 独立显卡DVI转VGA问题
    淘宝开源项目之Tsar
    remmina rdp远程连接windows
    linux 下查看硬件信息(mac,IP地址,硬盘型号,序列号等)
    Ubuntu16.04下安装googlechrome flash 插件和安装网易云音乐
    Linux实现crontab每秒秒执行
    Supervisord
    es 加磁盘扩容
    通知神器——java调用钉钉群自定义机器人
    python 退出程序的方式
  • 原文地址:https://www.cnblogs.com/Roy_88/p/5463058.html
Copyright © 2020-2023  润新知