SQL Server 支持臨時(shí)表。臨時(shí)表就是那些名稱以井號(hào) (#) 開(kāi)頭的表。如果當(dāng)用戶斷開(kāi)連接時(shí)沒(méi)有除去臨時(shí)表,SQL Server 將自動(dòng)除去臨時(shí)表。臨時(shí)表不存儲(chǔ)在當(dāng)前數(shù)據(jù)庫(kù)內(nèi),而是存儲(chǔ)在系統(tǒng)數(shù)據(jù)庫(kù) tempdb 內(nèi)。
臨時(shí)表有兩種類(lèi)型:
本地臨時(shí)表
以一個(gè)井號(hào) (#) 開(kāi)頭的那些表名。只有在創(chuàng)建本地臨時(shí)表的連接上才能看到這些表。
全局臨時(shí)表
以 兩個(gè)井號(hào) (##) 開(kāi)頭的那些表名。在所有連接上都能看到全局臨時(shí)表。如果在創(chuàng)建全局臨時(shí)表的連接斷開(kāi)前沒(méi)有顯式地除去這些表,那么只要所有其它任務(wù)停止引用它們,這些表即 被除去。當(dāng)創(chuàng)建全局臨時(shí)表的連接斷開(kāi)后,新的任務(wù)不能再引用它們。當(dāng)前的語(yǔ)句一執(zhí)行完,任務(wù)與表之間的關(guān)聯(lián)即被除去;因此通常情況下,只要?jiǎng)?chuàng)建全局臨時(shí)表 的連接斷開(kāi),全局臨時(shí)表即被除去。
==========================================================================
- SQL code
-
--應(yīng)用本地臨時(shí)表 declare @sql varchar(100) set @sql='select ''123'' as a,''abasdf'' as b into #t'
-
exec(@sql) select
-
* from #t go /*發(fā)現(xiàn)不能正確顯示臨時(shí)表的數(shù)據(jù) 提示: 服務(wù)器: 消息 208,級(jí)別 16,狀態(tài) 1,行 5 對(duì)象名 '#t' 無(wú)效。 */
-
--修改為全局臨時(shí)表 declare @sql varchar(100) set @sql='select ''123'' as a,''abasdf'' as b into ##t'
-
exec(@sql) select * from ##t drop table ##t go /*可以正確顯示臨時(shí)表的數(shù)據(jù)
分析原因:exec(@sql) 相當(dāng)于重新建立一個(gè)數(shù)據(jù)庫(kù)對(duì)話,所以對(duì)于本地臨時(shí)表,使用exec(@sql)創(chuàng)建臨時(shí)表,
在exec外部不能正確訪問(wèn);而使用全局臨時(shí)表就ok了
*/
- SQL code
-
exec ('select top 10 * into ##temp from syhouse'); exec ('select * from ##temp');
轉(zhuǎn)http://blog.csdn.net/hank5658/article/details/5543622