新しい FileTable を作成する方法、または既存の FileTable を変更または削除する方法について説明します。
FileTable の作成
FileTable は、定義済みの固定スキーマを持つ特殊なユーザー テーブルです。 このスキーマには、FILESTREAM データ、ファイルとディレクトリの情報、およびファイル属性が格納されます。 FileTable スキーマの詳細については、「 FileTable スキーマ」を参照してください。
Transact-SQL または SQL Server Management Studio を使用して、新しい FileTable を作成できます。 FileTable には固定スキーマがあるため、列の一覧を指定する必要はありません。 FileTable を作成するための簡単な構文では、次を指定できます。
ディレクトリ名。 FileTable フォルダー階層では、このテーブル レベルのディレクトリは、データベース レベルで指定されたデータベース ディレクトリの子になり、テーブルに格納されているファイルまたはディレクトリの親になります。
FileTableの名前列に使用するファイル名の照合順序の名前。
自動的に作成される 3 つの主キー制約と一意の制約に使用する名前。
方法: FileTable を作成する
Transact-SQL を使用して FileTable を作成する
AS FileTable オプションを指定して CREATE TABLE (Transact-SQL) ステートメントを呼び出して FileTable を作成 します。 FileTable には固定スキーマがあるため、列の一覧を指定する必要はありません。 新しい FileTable には、次の設定を指定できます。
FILETABLE_DIRECTORY。 FileTable に格納されているすべてのファイルとディレクトリのルート ディレクトリとして機能するディレクトリを指定します。 この名前は、データベース内のすべての FileTable ディレクトリ名の中で一意である必要があります。 現在の照合順序の設定に関係なく、一意性の比較では大文字と小文字を区別せずに行われます。
この値のデータ型は nvarchar(255) で、 Latin1_General_CI_AS_KS_WSの固定照合順序を使用します。
指定するディレクトリ名は、ファイル システムの有効なディレクトリ名に関する要件を満たしている必要があります。
この名前は、データベース内のすべての FileTable ディレクトリ名の中で一意である必要があります。 現在の照合順序の設定に関係なく、一意性の比較では大文字と小文字が区別されません。
FileTable の作成時にディレクトリ名を指定しない場合は、FileTable 自体の名前がディレクトリ名として使用されます。
FILETABLE_COLLATE_FILENAME。 FileTable の [名前 ] 列に適用する照合順序の名前を指定します。
Windows ファイルの名前付けセマンティクスに準拠するには、指定した照合順序で大文字と小文字を 区別 しない必要があります。
FILETABLE_COLLATE_FILENAMEの値を指定しない場合、またはdatabase_defaultを指定した場合、列は現在のデータベースの照合順序を継承します。 現在のデータベース照合順序が大文字と小文字を区別する場合、エラーが発生してCREATE TABLE操作が失敗します。
また、自動的に作成される 3 つの主キー制約と一意の制約に使用する名前を指定することもできます。 名前を指定しない場合、このトピックで後述するように、システムによって名前が生成されます。
FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME
FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME
ファイルテーブル_フルパス_ユニーク制約_名称
例
次の例では、新しい FileTable を作成し、 FILETABLE_DIRECTORY と FILETABLE_COLLATE_FILENAMEの両方のユーザー定義値を指定します。
CREATE TABLE DocumentStore AS FileTable
WITH (
FileTable_Directory = 'DocumentTable',
FileTable_Collate_Filename = database_default
);
GO
次の例では、新しい FileTable も作成します。 ユーザー定義の値が指定されていないため、 FILETABLE_DIRECTORY の値が FileTable の名前になり、FILETABLE_COLLATE_FILENAMEの値 が database_defaultになり、主キーと一意の制約がシステムによって生成された名前を受け取ります。
CREATE TABLE DocumentStore AS FileTable;
GO
SQL Server Management Studio を使用して FileTable を作成する
オブジェクト エクスプローラーで、選択したデータベースの下にあるオブジェクトを展開し、[ テーブル ] フォルダーを右クリックし、[ 新しい FileTable] を選択します。
このオプションでは、FileTable を作成するためにカスタマイズして実行できる Transact-SQL スクリプト テンプレートを含む新しいスクリプト ウィンドウが開きます。 スクリプトを簡単にカスタマイズするには、[クエリ] メニューの [テンプレート パラメーターの値の指定] オプションを使用します。
FileTable を作成するための要件と制限事項
既存のテーブルを FileTable に変換するように変更することはできません。
以前にデータベース レベルで指定した親ディレクトリには、null 以外の値が必要です。 データベース レベルのディレクトリの指定については、「 FileTable の前提条件を有効にする」を参照してください。
FileTable には FILESTREAM 列が含まれるため、FileTable には有効な FILESTREAM ファイル グループが必要です。 必要に応じて、FileTable を作成するための CREATE TABLE コマンドの一部として有効な FILESTREAM ファイル グループを指定できます。 ファイル グループを指定しない場合、FileTable はデータベースの既定の FILESTREAM ファイル グループを使用します。 データベースに FILESTREAM ファイル グループがない場合は、エラーが発生します。
CREATE TABLE...AS FILETABLE ステートメントの一部としてテーブル制約を作成することはできません。 ただし、 ALTER TABLE ステートメントを使用して、後で制約を追加できます。
tempdb データベースまたは他のどのシステム データベースにも FileTable を作成することはできません。
FileTable を一時テーブルとして作成することはできません。
FileTable の変更
FileTable には定義済みの固定スキーマがあるため、列を追加または変更することはできません。 ただし、FileTable には、カスタム インデックス、トリガー、制約、およびその他のオプションを追加できます。
ALTER TABLE ステートメントを使用して、システム定義制約を含む FileTable 名前空間を有効または無効にする方法については、「 FileTable の管理」を参照してください。
方法: FileTable のディレクトリを変更する
Transact-SQL を使用して FileTable のディレクトリを変更する
ALTER TABLE ステートメントを呼び出し、 FILETABLE_DIRECTORY SET オプションに有効な新しい値を指定します。
例
ALTER TABLE filetable_name
SET ( FILETABLE_DIRECTORY = N'directory_name' );
GO
SQL Server Management Studio を使用して FileTable のディレクトリを変更する
オブジェクト エクスプローラーで、FileTable を右クリックし、[ プロパティ ] を選択して [ テーブルのプロパティ ] ダイアログ ボックスを開きます。 [ FileTable ] ページで、 FileTable ディレクトリ名の新しい値を入力します。
FileTable を変更するための要件と制限事項
FILETABLE_COLLATE_FILENAMEの値を変更することはできません。
FileTable のシステム定義列を変更、削除、または無効にすることはできません。
FileTable に新しいユーザー列、計算列、または永続化された計算列を追加することはできません。
FileTable の削除
DROP TABLE (Transact-SQL) ステートメントの通常の構文を使用して FileTable を削除できます。
FileTable を削除すると、次のオブジェクトも削除されます。
FileTable のすべての列と、インデックス、制約、トリガーなど、テーブルに関連付けられているすべてのオブジェクトも削除されます。
FileTable ディレクトリとそのディレクトリに含まれているサブディレクトリは、データベースの FILESTREAM ファイルとディレクトリ階層から消えます。
FileTable のファイル名前空間に開いているファイル ハンドルがある場合、DROP TABLE コマンドは失敗します。 開いているハンドルを閉じる方法については、「 FileTable の管理」を参照してください。
FileTable の作成時に他のデータベース オブジェクトが作成される
新しい FileTable を作成すると、一部のシステム定義インデックスと制約も作成されます。 これらのオブジェクトを変更または削除することはできません。FileTable 自体が削除された場合にのみ消えます。 これらのオブジェクトの一覧を表示するには、カタログ ビュー sys.filetable_system_defined_objects (Transact-SQL) に対してクエリを実行します。
--View all objects for all filetables, unsorted
SELECT * FROM sys.filetable_system_defined_objects;
GO
--View sorted list with friendly names
SELECT OBJECT_NAME(parent_object_id) AS 'FileTable', OBJECT_NAME(object_id) AS 'System-defined Object'
FROM sys.filetable_system_defined_objects
ORDER BY FileTable, 'System-defined Object';
GO
新しい FileTable の作成時に作成されるインデックス
新しい FileTable を作成すると、次のシステム定義インデックスも作成されます。
[列] | [インデックスの種類] |
[path_locator]ASC | 主キー(非クラスター化) |
[parent_path_locator]ASC、 [名前]ASC |
一意で非クラスター化 |
[stream_id]ASC | 一意な非クラスタリング |
新しい FileTable の作成時に作成される制約
新しい FileTable を作成すると、次のシステム定義制約も作成されます。
制約 | 強制 |
---|---|
次の列の既定の制約: creation_time is_archive(アーカイブであるかどうか) is_directory is_hidden is_offline is_readonly is_system is_temporary 最終アクセス時刻 last_write_time path_locator stream_id |
システム定義の既定の制約では、指定した列に既定値が適用されます。 |
CHECK 制約 | システム定義の check 制約では、次の要件が適用されます。 有効なファイル名。 有効なファイル属性。 親オブジェクトはディレクトリである必要があります。 名前空間階層は、ファイル操作中にロックされます。 |
システム定義制約の名前付け規則
上記のシステム定義制約は、<constraintType>_<tablename>[_<columnname>]_<uniquifier> 形式で名前が付けられます。
<constraint_type> は CK (check 制約)、DF (既定の制約)、FK (外部キー)、PK (主キー)、または UQ (一意制約) です。
<uniquifier> は、名前を一意にするためにシステムによって生成される文字列です。 この文字列には、FileTable 名と一意の識別子が含まれている場合があります。