天天看點

臨時表和表變量文法備注參數

可以建立本地臨時表和全局臨時表。本地臨時表僅在目前會話中可見,而全局臨時表在所有會話中都可見。臨時表不能分區。

本地臨時表的名稱前面有一個數字元号 (#table_name),而全局臨時表的名稱前面有兩個數字元号 (##table_name)。

sql 語句使用 create table 語句中為 table_name 指定的值引用臨時表,例如:

複制代碼

如果在單個存儲過程或批進行中建立了多個臨時表,則它們必須有不同的名稱。

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

除非使用 drop table 顯式删除臨時表,否則臨時表将在退出其作用域時由系統自動删除:

當存儲過程完成時,将自動删除在存儲過程中建立的本地臨時表。由建立表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用建立此表的存儲過程的程序無法引用此表。

所有其他本地臨時表在目前會話結束時都将被自動删除。

全局臨時表在建立此表的會話結束且其他所有任務停止對其引用時将被自動删除。任務與表之間的關聯隻在單個 transact-sql 語句的生存周期内保持。換言之,當建立全局臨時表的會話結束時,最後一條引用此表的 transact-sql 語句完成後,将自動删除此表。

在存儲過程或觸發器中建立的本地臨時表的名稱可以與在調用存儲過程或觸發器之前建立的臨時表名稱相同。但是,如果查詢引用臨時表,而同時有兩個同名的臨時表,則不定義針對哪個表解析該查詢。嵌套存儲過程同樣可以建立與調用它的存儲過程所建立的臨時表同名的臨時表。但是,為了對其進行修改以解析為在嵌套過程中建立的表,此表必須與調用過程建立的表具有相同的結構和列名。下面的示例說明了這一點。

下面是結果集: 

當建立本地或全局臨時表時,create table 文法支援除 foreign key 限制以外的其他所有限制定義。如果臨時表中指定了 foreign key 限制,則該語句将傳回一條表明已跳過此限制的警告消息。此表仍将建立,但不使用 foreign key 限制。在 foreign key 限制中不能引用臨時表。

建議您使用表變量而不使用臨時表。當必須對臨時表顯式地建立索引時,或多個存儲過程或函數必須使用表值時,臨時表很有用。通常,表變量可提供更有效的查詢處理。

表變量

一種特殊的資料類型,用于存儲結果集以進行後續處理。table 主要用于臨時存儲一組行,這些行是作為表值函數的結果集傳回的。

注意:

可将函數和變量聲明為 table 類型。table 變量可用于函數、存儲過程和批進行中。

重要事項:

table 變量具有下列優點:

a. table 變量的行為類似于局部變量,有明确定義的作用域。這就是在其中聲明該變量的函數、存儲過程或批處理。 

在其作用域内,table 變量可像正常表那樣使用。該變量可應用于 select、insert、update 和 delete 語句中用到表或表的表達式的任何地方。但是,table 不能用于以下語句中: 

在定義 table 變量的函數、存儲過程或批處理結束時,會自動清除此變量。 

table 類型聲明中的 check 限制、default 值和計算列不能調用使用者定義函數。

在存儲過程中使用 table 變量與使用臨時表相比,減少了存儲過程的重新編譯量。

涉及 table 變量的事務隻在 table 變量更新期間存在。是以減少了 table 變量對鎖定和記錄資源的需求。

可以在批處理的 from 子句中按名稱引用 table 變量,如下例所示:

在 from 子句外,必須使用别名來引用 table 變量,如下例所示:

不支援在 table 變量之間進行指派操作。另外,由于 table 變量作用域有限,并且不是持久資料庫的一部分,因而不受事務復原的影響。

<dl><dt></dt></dl>

table_type_definition

與在 create table 中定義表時所用的資訊子集相同的資訊子集。表聲明包括列定義、名稱、資料類型和限制。允許的限制類型僅為 primary key、unique key 和 null。 

from:msdn

歡迎加群互相學習,共同進步。qq群:ios: 58099570 | android: 330987132 | go:217696290 | python:336880185 | 做人要厚道,轉載請注明出處!