2009-06-18 65 views
3

我搜索了但在SQL Server 2005/2008中找不到一个新手的临时表使用教程。我想了解临时表与正常表相比的优缺点,它的生命周期以及临时表如何共享(在同一会话中,跨会话)?在SQL Server中推荐一个很好的临时表教程

由于事先 乔治

回答

6

有两种方法可以创建临时表。 这将创建表并从PHYSICALTABLE插入数据;

SELECT FIELD1,FIELD2,FIELD3 INTO TempTable FROM PHYSICALTABLE; 

另一种方式是使用CREATE TABLE方法;

CREATE TABLE #TempTable (ID int,NAME varchar(50)); 
INSERT INTO #TempTable(ID,NAME) VALUES(1,'PERSON'); 

一旦连接关闭,或者您对它们使用DROP TABLE命令,临时表将被服务器删除。除非使用全局临时表(通过将##添加到表名中),否则每个连接只能访问其自己的临时表。我读过临时表会导致大表性能下降,所以我通常只使用临时表来联合两个表,然后用+ SUM对这两个表进行分组。

+0

我感到困惑的有关客户端的概念你的回复。我不确定你是否意味着连接?建立SQL Server连接时,没有称为客户端的参数。 – George2 2009-06-18 08:11:34

1

以下指南将出现不错的开端有关临时的详细信息表(&表变量)包括生命期,共享等:

Are SQL Server Temp Tables Really Necessary?还着眼于使用临时表的性能的原因。

将它们与'普通'表比较我会说最大的不同之处在于普通表在数据库中存在,因此应该在您需要存储正在使用的数据时使用,而应该使用临时表只是一个查询/存储过程等环境中工作......

2

这里是SQL的快速位创建临时表,并从中选择

-- Create Temp table 
CREATE TABLE #temps 
(
    VId int, 
    first VARCHAR(255), 
    surname VARCHAR(255), 
    DOB DATETIME 

    PRIMARY KEY (VId) 
) 

-- Insert some test data 
Insert into #temps (Vid, first, surname, DOB) 
VALUES (1, 'Bob', 'Jennings','23 Feb 1970') 


-- Insert some test data 
Insert into #temps (Vid, first, surname, DOB) 
VALUES (2, 'John', 'Doe','14 Oct 1965') 


-- Select data from the temp table 
Select * from #temps 


-- Run if you wish to drop the table 
-- DROP T ABLE #temps