Sqlserver臨時表
臨時表說明:
SQL Server臨時表是臨時物件的一種,臨時物件是以#或者##為字首的,
諸如臨時儲存過程、臨時函式等都是臨時物件,臨時物件都儲存在tempdb資料庫中。
當我們關閉資料庫時,臨時表會自動刪除。臨時表分為本地臨時表和全域性臨時表,
一個#號為字首的臨時表是本地的,只有當前使用者會話才可以訪問,兩個##為
字首的臨時表是全域性的。本地臨時表的資料庫連線有表的訪問許可權,其它連線不能訪問
該表;不同的資料庫連線中,建立的本地臨時表雖然"名字"相同,但是這些表之間
相互並不存在任何關係;在SQLSERVER中,通過特別的命名機制保證本地臨時表在數
據庫連線上的獨立性,意思是你可以在不同的連線裡使用相同的本地臨時表名稱。
全域性臨時表是使用者在建立表的時候新增"##"字首的表,其特點是所以資料庫連線
均可使用該全域性臨時表,當所有引用該臨時表的資料庫連線斷開後自動刪除。
全域性臨時表相比本地臨時表,命名上就需要注意了,與本地臨時表不同的是,全
局臨時表名不能重複。臨時表利用了資料庫臨時表空間,由資料庫系統自動進行維護
,因此節省了物理表空間。並且由於臨時表空間一般利用虛擬記憶體,大大減少了硬碟的I/O次數,
因此也提高了系統效率。臨時表在事務完畢或會話完畢資料庫會自動清空,不必記得用完
後刪除資料。
臨時表建立:
Case 1: 使用CREATE TABLE建立臨時表
CREATE TABLE {# | ##} temp_table_name (
column_name_1 data type CONSTRAINT,
column_name_2 data type CONSTRAINT,
.
.
.
column_name_n data type CONSTRAINT,
);
Case 2:使用SELECT INTO建立臨時表
SELECT
columns_to_be_selected
INTO
{ # | ##} temp_table_name
FROM
table_name;
臨時表的使用
1. 增刪改查跟物料表是一樣的
2. 需要主要其作用範圍,比如在儲存空間中使用下面語句,則會報物件名#temp無效,
是因為臨時表的作用域在exec中,
exec('select IDENTITY(int,1,1) as ID into #temp from tbName' )
select * from #temp 改成
exec('select IDENTITY(int,1,1) as ID into #temp from tbName;select * from #temp ' )