FileTable にファイルを読み込む方法またはファイルを移行する方法について説明します。
FileTable へのファイルの読み込みまたは移行
FileTable へのファイルの読み込みまたは移行を選択する方法は、ファイルが現在格納されている場所によって異なります。
ファイルの現在の場所 | 移行のオプション |
---|---|
ファイルは現在、ファイル システムに格納されています。 SQL Server には、ファイルに関する知識がありません。 |
FileTable は Windows ファイル システムのフォルダーとして表示されるため、ファイルの移動またはコピーに使用できる任意の方法を使用して、新しい FileTable にファイルを簡単に読み込むことができます。 これらのメソッドには、Windows エクスプローラー、xcopy や robocopy などのコマンド ライン オプション、カスタム スクリプトまたはアプリケーションが含まれます。 既存のフォルダーを FileTable に変換することはできません。 |
ファイルは現在、ファイル システムに格納されています。 SQL Server には、ファイルへのポインターを含むメタデータのテーブルが含まれています。 |
最初の手順では、上記のいずれかの方法を使用してファイルを移動またはコピーします。 2 番目の手順では、ファイルの新しい場所を指すように、メタデータの既存のテーブルを更新します。 詳細については、このトピックの「 例: ファイル システムから FileTable へのファイルの移行 」を参照してください。 |
方法: FileTable にファイルを読み込む
FileTable にファイルを読み込む際に使用できるメソッドは次のとおりです。
ソース フォルダーから Windows エクスプローラーの新しい FileTable フォルダーにファイルをドラッグ アンド ドロップします。
コマンド プロンプトまたはバッチ ファイルまたはスクリプトで、MOVE、COPY、XCOPY、ROBOCOPY などのコマンド ライン オプションを使用します。
System.IO 名前空間のメソッドを使用してファイルを移動またはコピーするカスタム アプリケーションを C# または Visual Basic.NET で記述します。
例: ファイル システムから FileTable へのファイルの移行
このシナリオでは、ファイルはファイル システムに格納され、SQL Server にはファイルへのポインターを含むメタデータのテーブルがあります。 ファイルを FileTable に移動し、メタデータ内の各ファイルの元の UNC パスを FileTable UNC パスに置き換えます。 GetPathLocator (Transact-SQL) 関数は、この目標を達成するのに役立ちます。
この例では、写真に関するデータを含む既存のデータベース テーブル ( PhotoMetadata
) があるとします。 このテーブルには、.jpg ファイルへの実際の UNC パスを含む varchar
(512) 型の列UNCPath
があります。
イメージ ファイルをファイル システムから FileTable に移行するには、次の操作を行う必要があります。
ファイルを保持する新しい FileTable を作成します。 この例では、
dbo.PhotoTable
テーブル名を使用しますが、テーブルを作成するコードは表示されません。xcopy などのツールを使用して、.jpg ファイルとそのディレクトリ構造を FileTable のルート ディレクトリにコピーします。
次のようなコードを使用して、
PhotoMetadata
テーブルのメタデータを修正します。
-- Add a path locator column to the PhotoMetadata table.
ALTER TABLE PhotoMetadata ADD pathlocator hierarchyid;
-- Get the root path of the Photo directory on the File Server.
DECLARE @UNCPathRoot varchar(100) = '\\RemoteShare\Photographs';
-- Get the root path of the FileTable.
DECLARE @FileTableRoot varchar(1000);
SELECT @FileTableRoot = FileTableRootPath('dbo.PhotoTable');
-- Update the PhotoMetadata table.
-- Replace the File Server UNC path with the FileTable path.
UPDATE PhotoMetadata
SET UNCPath = REPLACE(UNCPath, @UNCPathRoot, @FileTableRoot);
-- Update the pathlocator column to contain the pathlocator IDs from the FileTable.
UPDATE PhotoMetadata
SET pathlocator = GetPathLocator(UNCPath);
FileTable へのファイルの一括読み込み
FileTable は、一括操作の通常のテーブルと同様に動作し、次の条件が使用されます。
FileTable にはシステム定義の制約があり、ファイルとディレクトリの名前空間の整合性が維持されます。 これらの制約は、FileTable に一括読み込まれたデータで検証する必要があります。 一部の一括挿入操作ではテーブル制約を無視できるため、次の要件が適用されます。
制約を適用する一括読み込み操作は、他のテーブルと同様に FileTable に対して実行できます。 このカテゴリには、次の操作が含まれます。
bcp を使用した CHECK_CONSTRAINTS 句。
BULK INSERT を用いた CHECK_CONSTRAINTS 句。
INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) にIGNORE_CONSTRAINTS句を使用しないでください。
FileTable システム定義制約が無効になっていない限り、制約を適用しない一括読み込み操作は失敗します。 このカテゴリには、次の操作が含まれます。
bcpにCHECK_CONSTRAINTS句がない場合。
CHECK_CONSTRAINTS句を使用しないBULK INSERT。
INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) with IGNORE_CONSTRAINTS 句。
方法: FileTable にファイルを一括読み込みする
さまざまな方法を使用して、FileTable にファイルを一括読み込みできます。
bcp
CHECK_CONSTRAINTS句で呼び出します。
FileTable 名前空間を無効にし、CHECK_CONSTRAINTS句を使用せずに呼び出します。 その後、FileTable 名前空間を再度有効にします。
BULK の挿入
CHECK_CONSTRAINTS句を含む呼び出し。
FileTable 名前空間を無効にし、CHECK_CONSTRAINTS句を使用せずに呼び出します。 その後、FileTable 名前空間を再度有効にします。
INSERT INTO ...SELECT * FROM OPENROWSET(BULK ...)
IGNORE_CONSTRAINTS句を使用して呼び出します。
FileTable 名前空間を無効にし、IGNORE_CONSTRAINTS句を使用せずに呼び出します。 その後、FileTable 名前空間を再度有効にします。
FileTable 制約を無効にする方法については、「 FileTable の管理」を参照してください。
方法: 一括読み込みの FileTable 制約を無効にする
システム定義制約を適用するオーバーヘッドなしで FileTable にファイルを一括読み込みするには、制約を一時的に無効にすることができます。 詳細については、「 FileTable の管理」を参照してください。
こちらもご覧ください
Transact-SQL を使用して FileTable にアクセスする
File Input-Output API を使用して FileTable にアクセスする