臨時表與SELECT INTO、INSERT INTO SELECT
本文為其他兩位作者作品的結合。
原連結:http://www.cnblogs.com/jeffwongishandsome/archive/2009/08/05/1526466.html
http://www.cnblogs.com/freshman0216/archive/2008/08/15/1268316.html
1、建立方法:
方法一:
create table TempTableName
或
select [欄位1,欄位2,...,] into TempTableName from table
方法二:
create table tempdb.MyTempTable(Tid int)
說明:
(1)、臨時表其實是放在資料庫tempdb裡的一個使用者表;
(2)、TempTableName必須帶“#”,“#"可以是一個或者兩個,以#(區域性)或##(全域性)開頭的表,這種表在會話期間存在,會話結束則自動刪除;
(3)、如果建立時不以#或##開頭,而用tempdb.TempTable來命名它,則該表可在資料庫重啟前一直存在。
2、手動刪除
drop table TempTableName
說明:
DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
(1)、當儲存過程完成時,將自動除去在儲存過程中建立的本地臨時表。由建立表的儲存過程執行的所有巢狀儲存過程都可以引用此表。但呼叫建立此表的儲存過程的程序無法引用此表;
(2)、所有其它本地臨時表在當前會話結束時自動除去;
(3)、全域性臨時表在建立此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個Transact-SQL語句的生存週期內保持。換言之,當建立全域性臨時表的會話結束時,最後一條引用此表的Transact-SQL語句完成後,將自動除去此表。
3、示例程式碼
(1)建立
use testdb
--建立區域性臨時表
create table #tmpStudent(Tid int,Name varchar(50),Age int)
insert into #tmpStudent values('xiaowang',25)
select * from #tmpStudent
--建立區域性臨時表 另一種寫法
select * into #tmpStudent from student
select * from #tmpStudent
第二種建立方法:
create table tempdb.MyTempTable(Tid int) --有對應許可權才可以這麼寫
(2)刪除
drop table #tmpStudent
=======================================================================================================================
Insert是T-sql中常用語句,Insert INTO table(field1,field2,...) values(value1,value2,...)這種形式的在應用程式開發中必不可少。但我們在開發、測試過程中,經常會遇到需要表複製的情況,如將一個table1的資料的部分欄位複製到table2中,或者將整個table1複製到table2中,這時候我們就要使用SELECT INTO 和 INSERT INTO SELECT 表複製語句了。
1.INSERT INTO SELECT語句
語句形式為:
Insert into Table2(field1,field2,...) select value1,value2,... from Table1
要求目標表Table2必須存在
2.SELECT INTO FROM語句
語句形式為:
SELECT vale1, value2 into Table2 from Table1
要求目標表Table2不存在,因為在插入時會自動建立表Table2,並將Table1中指定欄位資料複製到Table2中。