ユーザー定義テーブル型
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 AdventureWorks;
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
変更履歴
変更内容 |
---|
「ユーザー定義テーブル型の定義に DEFAULT 値を指定することはできません」という記述を「制限事項」から削除しました。 |