zoukankan      html  css  js  c++  java
  • 表变量和临时表自定义类型的区别

    表变量用自定义类型时类型在当前库有效
    临时表用自定义类型时类型在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)
    /*
    定义表变量成功
    创建临时表成功
    */



  • 相关阅读:
    王钿《淡逻辑设计的学习》
    格雷码
    perl中 数组 和 列表的区别!
    FPGA建立时间(setup time)&保持时间(hold time)&竞争和冒险&毛刺
    Verilog三段式状态机描述
    [转]Unit Testing 101: Are You Testing Your JavaScript?
    [JavaScript]Jasmine中如何选择只运行部分Cases
    Java编程中推荐的Singleton模式
    [转]如何在Intellij中使用JsTestDriver做Javascript的Unit Testing
    [Groovy]Test with Spock
  • 原文地址:https://www.cnblogs.com/Roy_88/p/5463058.html
Copyright © 2011-2022 走看看