資料表 (Transact-SQL)
更新: 2005 年 12 月 5 日
這是用來儲存結果集以便稍後再進行處理的特殊資料類型。table 主要是當作暫存儲存體,用來儲存作為資料表值函數結果集而傳回的一組資料列。
附註: |
---|
若要宣告 table 類型的變數,請使用 DECLARE @local_variable。 |
語法
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 )
}
引數
table_type_definition
這是在 CREATE TABLE 中,用來定義資料表的相同資訊子集。資料表宣告包括資料行定義、名稱、資料類型和條件約束。允許使用的條件約束類型只有 PRIMARY KEY、UNIQUE KEY 和 NULL。如需有關語法的詳細資訊,請參閱<CREATE TABLE (Transact-SQL)>、<CREATE FUNCTION (Transact-SQL)>和<DECLARE @local\_variable (Transact-SQL)>。
- collation_definition
這是 Microsoft Windows 地區設定和比較樣式、Windows 地區設定和二進位標記法所組成之資料行的定序,或 Microsoft SQL Server 2005 定序。若未指定 collation_definition,資料行就會繼承目前資料庫的定序。如果將資料行定義為 Common Language Runtime (CLR) 使用者自訂類型,資料行便會繼承使用者自訂類型的定序。
備註
函數和變數可以宣告成 table 類型。在函數、預存程序和批次中,可以使用 table 變數。
重要事項: |
---|
修改 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)
其他資源
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2005 年 12 月 5 日 |
|