資料表 (Transact-SQL)

更新: 2005 年 12 月 5 日

這是用來儲存結果集以便稍後再進行處理的特殊資料類型。table 主要是當作暫存儲存體,用來儲存作為資料表值函數結果集而傳回的一組資料列。

ms175010.note(zh-tw,SQL.90).gif附註:
若要宣告 table 類型的變數,請使用 DECLARE @local_variable

主題連結圖示Transact-SQL 語法慣例

語法


table_type_definition ::= 
    TABLE ( { column_definition | table_constraint } [ ,...n ] ) 

column_definition ::= 
        column_name scalar_data_type 
    [ COLLATE collation_definition ] 
    [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed , increment ) ] ] 
    [ ROWGUIDCOL ] 
    [ column_constraint ] [ ...n ] 

column_constraint ::= 
    { [ NULL | NOT NULL ] 
    | [ PRIMARY KEY | UNIQUE ] 
    | CHECK ( logical_expression ) 
    } 

table_constraint ::= 
     { { PRIMARY KEY | UNIQUE } ( column_name [ ,...n ] ) 
     | CHECK ( logical_expression ) 
     } 

引數

  • collation_definition
    這是 Microsoft Windows 地區設定和比較樣式、Windows 地區設定和二進位標記法所組成之資料行的定序,或 Microsoft SQL Server 2005 定序。若未指定 collation_definition,資料行就會繼承目前資料庫的定序。如果將資料行定義為 Common Language Runtime (CLR) 使用者自訂類型,資料行便會繼承使用者自訂類型的定序。

備註

函數和變數可以宣告成 table 類型。在函數、預存程序和批次中,可以使用 table 變數。

ms175010.note(zh-tw,SQL.90).gif重要事項:
修改 table 變數的查詢不會產生平行查詢執行計劃。修改非常大的 table 變數或複雜查詢中的 table 變數時,可能會影響效能。在這些狀況中,請改用暫存資料表。如需詳細資訊,請參閱<CREATE TABLE (Transact-SQL)>。讀取但不修改 table 變數的查詢仍然可以平行處理。

table 變數的優點如下:

  • table 變數的行為類似於本機變數。它有一個定義妥善的範圍。這是其宣告所在的函數、預存程序或批次。
    table 變數的範圍內,您可以依照正規資料表的方式來使用它。在 SELECT、INSERT、UPDATE 和 DELETE 陳述式中,任何使用資料表或資料表運算式的位置,都可以使用它。不過,在下列陳述式中,不能使用 table

    SELECT select_list INTO table_variable   
    

    在定義 table 變數的函數、預存程序或批次結束時,會自動清除 table 變數。

  • table 類型宣告中的 CHECK 條件約束、DEFAULT 值和計算資料行,無法呼叫使用者自訂函數。

  • 預存程序所用的 table 變數所造成的預存程序重新編譯,比使用暫存資料表時還少。

  • 包含 table 變數的交易,只會在 table 變數更新期間持續存在。因此,table 變數比較不需要鎖定和記錄資源。

您無法明確建立 table 變數的索引,也無法保留 table 變數的任何統計資料。在某些情況下,改用支援索引和統計資料的暫存資料表可以改進效能。如需有關暫存資料表的詳細資訊,請參閱<CREATE TABLE (Transact-SQL)>。

批次之 FROM 子句中的名稱可以依照下列範例來參考 table 變數:

SELECT Employee_ID, Department_ID FROM @MyTableVar

在 FROM 子句之外,您必須依照下列範例所示,利用別名來參考 table 變數:

SELECT EmployeeID, DepartmentID 
FROM @MyTableVar m
JOIN Employee on (m.EmployeeID =Employee.EmployeeID AND
   m.DepartmentID = Employee.DepartmentID)

不支援 table 變數之間的指派作業。另外,由於 table 變數的範圍受到限制,且不是保存資料庫的一部份,因此,它們不會受交易回復的影響。

請參閱

參考

COLLATE (Transact-SQL)
CREATE FUNCTION (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)

其他資源

資料表值使用者自訂函數

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2005 年 12 月 5 日

新增內容:
  • 新增有關未指定 collation_definition 引數時的定序資訊。
變更的內容:
  • 修改有關 table 變數和平行處理原則的「重要事項」附註。