SQL Server中临时表与表变量有什么区别 - 面向对象网,数据库,mssql,学习,对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > 数据库 > MSSQL > 正文

SQL Server中临时表与表变量有什么区别

来源: www.bianceng.cn 阅读:

我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量。在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢?

临时表

临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在。临时表在创建的时候都会产生SQLServer的系统日志,虽它们在Tempdb中体现,是分配在内存中的,它们也支持物理的磁盘,但用户在指定的磁盘里看不到文件。

临时表分为本地和全局两种,本地临时表的名称都是以“#”为前缀,只有在本地当前的用户连接中才是可见的,当用户从实例断开连接时被删除。全局临时表的名称都是以“##”为前缀,创建后对任何用户都是可见的,当所有引用该表的用户断开连接时被删除。

下面我们来看一个创建临时表的例子:

CREATE TABLE dbo.#News  
  (  
  News_id int NOT NULL,  
  NewsTitle varchar(100),  
  NewsContent varchar(2000),  
  NewsDateTime datetime  
  )

临时表可以创建索引,也可以定义统计数据,所以可以用数据定义语言(DDL)的声明来阻止临时表添加的限制,约束,并参照完整性,如主键和外键约束。比如来说,我们现在来为#News表字段NewsDateTime来添加一个默认的GetData()当前日期值,并且为News_id添加一个主键,我们就可以使用下面的语句:

ALTER TABLE dbo.#News  
  ADD
  CONSTRAINT [DF_NewsDateTime] DEFAULT (GETDATE()) FOR[NewsDateTime],  
  PRIMARY KEY CLUSTERED  
  (  
  [News_id]  
  ) ON [PRIMARY]  
  GO  
      
IF  EXISTS (SELECT * FROMtempdb..sysobjects  WHERE id =object_id('tempdb..##wzg_test') and type='U')  
      
   begin
      
                      DROP TABLE[addon_scm].[##wzg_test]  
      
                      select 'droptable ##wzg_test'
      
   end
      
else
      
   begin
      
                      CREATE TABLE  [addon_scm].[##wzg_test]  
      
                      (  
      
                                  id      int ,  
      
                                  name     varchar(100)    
      
                      )  
      
                      select 'createtable ##wzg_test'
      
   end
      
IF  EXISTS (SELECT * FROMtempdb..sysobjects  WHERE id =object_id('tempdb..##wzg_test') and type='U')  
      
   Begin
      
  insert into [addon_scm].[##wzg_test] values(1,'wzh')  
      
              select * from [addon_scm].[##wzg_test]  
      
   end  

临时表在创建之后可以修改许多已定义的选项,包括:

1)添加、修改、删除列。例如,列的名称、长度、数据类型、精度、小数位数以及为空性均可进行修改,只是有一些限制而已。

2)可添加或删除主键和外键约束。

3)可添加或删除 UNIQUE和 CHECK 约束及DEFAULT 定义(对象)。

4)可使用IDENTITY 或 ROWGUIDCOL 属性添加或删除标识符列。虽然ROWGUIDCOL 属性也可添加至现有列或从现有列删除,但是任何时候在表中只能有一列可具有该属性。

5)表及表中所选定的列已注册为全文索引。

Tags:
相关文章列表: