ユーザー定義テーブル型

SQL Server 2008 では、ユーザー定義テーブル型は、テーブル構造の定義を表すユーザー定義型になります。ユーザー定義テーブル型を使用すると、ストアド プロシージャや関数のテーブル値パラメーターを宣言したり、バッチやストアド プロシージャまたは関数の本文内で使用するテーブル変数を宣言できます。テーブル構造を定義する方法の詳細については、「CREATE TABLE (Transact-SQL)」を参照してください。

ユーザー定義テーブル型を作成するには、CREATE TYPE ステートメントを使用します。ユーザー定義テーブル型のデータが特定の要件を満たすようにするために、ユーザー定義テーブル型に対して一意の制約や主キーを作成できます。

ユーザー定義型に関連付けられているカタログ ビューについては、「sys.types」および「sys.table_types」を参照してください。

制限事項

ユーザー定義テーブル型には次の制限事項があります。

  • ユーザー定義テーブル型を、テーブル内の列または構造化されているユーザー定義型内のフィールドとして使用することはできません。

  • ユーザー定義テーブル型に基づいたエイリアス型

  • [NOT FOR REPLICATION] オプションは使用できません。

  • CHECK 制約には、永続化する計算列が必要です。

  • 計算列の主キーは、PERSISTED および NOT NULL である必要があります。

  • 非クラスター化インデックスは、それがユーザー定義テーブル型に対する PRIMARY KEY または UNIQUE 制約の作成の結果生じたものでない限り、ユーザー定義テーブル型に対して作成できません (SQL Server では、インデックスを使用して UNIQUE または PRIMARY KEY 制約を適用します)。

  • 作成後に、ユーザー定義テーブル型の定義を変更することはできません。

  • ユーザー定義関数を、ユーザー定義テーブル型の計算列の定義内で呼び出すことはできません。

セキュリティ

ユーザー定義テーブル型の権限は、CREATE、GRANT、DENY、ALTER、CONTROL、TAKE OWNERSHIP、REFERENCES、EXECUTE、VIEW DEFINITION、および REVOKE の Transact-SQL キーワードを使用することで、SQL Server のオブジェクト セキュリティ モデルに従います。

注意

テーブル型に CONTROL 権限を使用した場合、そのテーブル型のその他すべての権限も暗黙的に適用されます。

スキーマ バインドは、DECLARE ステートメントが発生する関数で WITH SCHEMABINDING が指定された場合に行われます。REFERENCES 権限は、テーブル型がルーチン内のパラメーターであるか、SCHEMABINDING が指定されている場合に、ユーザー定義テーブル型に必要です。その他すべての場合には、スキーマ バインドは行われず、REFERENCES 権限はユーザー定義テーブル型には必要とされません。

ユーザー定義テーブル型を使用するテーブル変数を宣言するには、そのユーザー定義テーブル型に EXECUTE 権限が必要です。

注意

CASCADE オプションは、ユーザー定義テーブル型の権限には適用されません。ユーザー定義テーブル型を型定義に埋め込むことはできないためです。

A. ユーザー定義テーブル型を作成する

ユーザー定義テーブル型を作成する方法を次の例に示します。

USE AdventureWorks2008R2;
GO

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

B. ユーザー定義テーブル型の権限を取り消す

特定のユーザー定義テーブル型の権限を取り消す方法を次の例に示します。REFERENCES 権限は、データベース myDatabase のリレーショナル スキーマ mySchema 内にあるユーザー定義テーブル型 CustomerListType に対し、JoAnna というユーザーから取り消されます。

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