SQL Server建立和使用暫存資料表(轉)

來源:互聯網
上載者:User

建立暫存資料表
       方法一:
     create table #暫存資料表名(欄位1 約束條件,
                      欄位2 約束條件,
                  .....)
        create table ##暫存資料表名(欄位1 約束條件,
                          欄位2 約束條件,
                      .....)
        方法二:
     select * into #暫存資料表名 from 你的表;
       select * into ##暫存資料表名 from 你的表;
註:以上的#代表局部暫存資料表,##代表全域暫存資料表

查詢暫存資料表
     select * from #暫存資料表名;
       select * from ##暫存資料表名;

刪除暫存資料表
     drop table #暫存資料表名;
       drop table ##暫存資料表名;

 

 

 

SQL SERVER暫存資料表的使用http://www.cnblogs.com/shineqiujuan/archive/2008/11/13/1332657.html

drop table #Tmp   --刪除暫存資料表#Tmp
create table #Tmp --建立暫存資料表#Tmp
(
    ID   int IDENTITY (1,1)     not null, --建立列ID,並且每次新增一條記錄就會加1
    WokNo                varchar(50),  
    primary key (ID)      --定義ID為暫存資料表#Tmp的主鍵     
);
Select * from #Tmp    --查詢暫存資料表的資料
truncate table #Tmp --清空暫存資料表的所有資料和約束

相關例子:

Declare @Wokno Varchar(500) --用來記錄職工號
Declare @Str NVarchar(4000) --用來存放查詢語句
Declare @Count int --求出總記錄數     
Declare @i int
Set @i = 0
Select @Count = Count(Distinct(Wokno)) from #Tmp
While @i < @Count
    Begin
       Set @Str = 'Select top 1 @Wokno = WokNo from #Tmp Where id not in (Select top ' + Str(@i) + 'id from #Tmp)'
       Exec Sp_ExecuteSql @Str,N'@WokNo Varchar(500) OutPut',@WokNo Output
       Select @WokNo,@i --一行一行把職工號顯示出來
       Set @i = @i + 1
    End

暫存資料表
可以建立本地和全域暫存資料表。本地暫存資料表僅在當前會話中可見;全域暫存資料表在所有會話中都可見。
本地暫存資料表的名稱前面有一個編號符 (#table_name),而全域暫存資料表的名稱前面有兩個編號符 (##table_name)。

SQL 陳述式使用 CREATE TABLE 語句中為 table_name 指定的名稱引用暫存資料表:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)

如果本地暫存資料表由預存程序建立或由多個使用者同時執行的應用程式建立,則 SQL Server 必須能夠區分由不同使用者建立的表。為此,SQL Server 在內部為每個本地暫存資料表的表名追加一個數字尾碼。儲存在 tempdb 資料庫的 sysobjects 表中的暫存資料表,其全名由 CREATE TABLE 語句中指定的表名和系統產生的數字尾碼組成。為了允許追加尾碼,為本地暫存資料表指定的表名 table_name 不能超過 116 個字元。

除非使用 DROP TABLE 語句顯式除去暫存資料表,否則暫存資料表將在退出其範圍時由系統自動除去:

當預存程序完成時,將自動除去在預存程序中建立的本地暫存資料表。由建立表的預存程序執行的所有嵌套預存程序都可以引用此表。但調用建立此表的預存程序的進程無法引用此表。

所有其它本地暫存資料表在當前會話結束時自動除去。

全域暫存資料表在建立此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 陳述式的生存周期內保持。換言之,當建立全域暫存資料表的會話結束時,最後一條引用此表的 Transact-SQL 陳述式完成後,將自動除去此表。
在預存程序或觸發器中建立的本地暫存資料表與在調用預存程序或觸發器之前建立的同名暫存資料表不同。如果查詢引用暫存資料表,而同時有兩個同名的暫存資料表,則不定義針對哪個表解析該查詢。嵌套預存程序同樣可以建立與調用它的預存程序所建立的暫存資料表同名的暫存資料表。嵌套預存程序中對錶名的所有引用都被解釋為是針對該嵌套過程所建立的表,例如:

CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO

下面是結果集:

(1 row(s) affected)

Test1Col   
-----------
1          

(1 row(s) affected)

Test2Col   
-----------
2          

當建立本地或全域暫存資料表時,CREATE TABLE 文法支援除 FOREIGN KEY 約束以外的其它所有約束定義。如果在暫存資料表中指定 FOREIGN KEY 約束,該語句將返回警告資訊,指出此約束已被忽略,表仍會建立,但不具有 FOREIGN KEY 約束。在 FOREIGN KEY 約束中不能引用暫存資料表。

考慮使用表變數而不使用暫存資料表。當需要在暫存資料表上顯式地建立索引時,或多個預存程序或函數需要使用表值時,暫存資料表很有用。通常,表變數提供更有效查詢處理。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.