技术开发 频道

SQL Server中临时表与表变量的区别

  表变量

  表变量创建的语法类似于临时表,区别就在于创建的时候,必须要为之命名。表变量是变量的一种,表变量也分为本地及全局的两种,本地表变量的名称都是以“@”为前缀,只有在本地当前的用户连接中才可以访问。全局的表变量的名称都是以“@@”为前缀,一般都是系统的全局变量,像我们常用到的,如@@Error代表错误的号,@@RowCount代表影响的行数。

  如我们看看创建表变量的语句:

DECLARE @News Table
  (
  News_id
int NOT NULL,
  NewsTitle
varchar(100),
  NewsContent
varchar(2000),
  NewsDateTime
datetime
  )

 

  比较临时表及表变量都可以通过SQL的选择、插入、更新及删除语句,它们的的不同主要体现在以下这些:

  (1)表变量是存储在内存中的,当用户在访问表变量的时候,SQL Server是不产生日志的,而在临时表中是产生日志的;

  (2)在表变量中,是不允许有非聚集索引的;

  (3)表变量是不允许有DEFAULT默认值,也不允许有约束;

  (4)临时表上的统计信息是健全而可靠的,但是表变量上的统计信息是不可靠的;

  (5)临时表中是有锁的机制,而表变量中就没有锁的机制。

  我们现在来看一个完整的例子,来看它们的用法的异同:

  利用临时表  

CREATE TABLE dbo.#News
  (
  News_id
int NOT NULL,
  NewsTitle
varchar(100),
  NewsContent
varchar(2000),
  NewsDateTime
datetime
  )
  
INSERT INTO dbo.#News (News_id, NewsTitle, NewsContent, NewsDateTime)
  
VALUES (1,'BlueGreen', 'Austen', 200801, GETDATE())
  
SELECT News_id, NewsTitle, NewsContent, NewsDateTime FROM dbo.#News
  
DROP TABLE dbo.[#News]
0
相关文章