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