2009-06-18 67 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