使用者定義資料表類型

在 SQL Server 2008 中,使用者定義資料表類型是顯示資料表結構定義的使用者定義型別。您可以使用使用者定義資料表類型,宣告預存程序或函數的資料表值參數,或是宣告您想要在批次、預存程序或函數的內文中使用的資料表變數。如需有關如何定義資料表結構的詳細資訊,請參閱<CREATE TABLE (Transact-SQL)>。

若要建立使用者定義資料表類型,請使用 CREATE TYPE 陳述式。為了確保在使用者定義資料表類型中的資料符合特定的需求,您可以在使用者定義資料表類型中建立唯一的條件約束和主索引鍵。

如需有關與使用者定義型別相關聯的目錄檢視的詳細資訊,請參閱 sys.typessys.table_types

限制

使用者定義資料表類型有下列限制:

  • 使用者定義資料表類型不能做為資料表中的資料行來使用,也不能做為結構化使用者定義型別的欄位。

  • 基於使用者定義資料表類型的別名資料型別

  • 不允許 [NOT FOR REPLICATION] 選項。

  • CHECK 條件約束需要保存計算資料行。

  • 計算資料行的主索引鍵必須是 PERSISTED 和 NOT NULL。

  • 使用者定義資料表類型上不能建立非叢集索引,除非該索引是在使用者定義資料表類型上建立 PRIMARY KEY 或 UNIQUE 條件約束的結果 (SQL Server 強制使用索引產生 UNIQUE 或 PRIMARY KEY 條件約束)。

  • 使用者定義資料表類型的定義在建立後就不能修改。

  • 使用者定義函數不能在使用者定義資料表類型的計算資料行之定義中呼叫。

安全性

每個使用者定義資料表類型的權限都遵循 SQL Server 的物件安全性模型,其方式是使用下列 Transact-SQL 關鍵字:CREATE、GRANT、DENY、ALTER、CONTROL、TAKE OWNERSHIP、REFERENCES、EXECUTE、VIEW DEFINITION 和 REVOKE。

[!附註]

資料表類型上的 CONTROL 權限表示了在資料表類型上的所有其他權限。

當 DECLARE 陳述式指定 WITH SCHEMABINDING時,會建立結構描述繫結。當資料表類型是常式中的參數或當指定了 SCHEMABINDING 時,使用者定義資料表類型中必須有 REFERENCES 權限。而在所有其他情況下,不會建立結構描述繫結,而使用者定義資料表類型中也不需要 REFERENCES 權限。

若要宣告使用使用者定義資料表類型的資料表變數,在該使用者定義資料表類型中就需要 EXECUTE 權限。

[!附註]

對使用者定義資料表類型權限而言,CASCADE 選項不是強制性的,因為使用者定義資料表類型不能內嵌於任何類型的定義中。

範例

A. 建立使用者定義資料表類型

下列範例顯示如何建立使用者定義資料表類型。

USE AdventureWorks;
GO

/* Create a user-defined table type */
CREATE TYPE LocationTableType AS TABLE 
( LocationName VARCHAR(50)
, CostRate INT );
GO

B. 叫用使用者定義資料表類型上的權限

下列範例顯示如何在特定使用者定義資料表類型上叫用權限。在 myDatabase 資料庫中的 mySchema 關聯式結構描述內,使用者定義資料表類型 CustomerListType 中一位名叫 JoAnna 的使用者,叫用了 REFERENCES 權限。

USE myDatabase
GO
REVOKE REFERENCES ON TYPE::[mySchema].[CustomerListType] FROM JoAnna
GO

變更記錄

更新的內容

已從限制移除下列陳述式:您無法在使用者定義資料表類型的定義中指定 DEFAULT 值。