FileTable へのファイルの読み込みLoad Files into FileTables

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

FileTable にファイルを読み込むまたは移行する方法について説明します。Describes how to load or migrate files into FileTables.

FileTable へのファイルの読み込みまたは移行Loading or Migrating Files into a FileTable

FileTable へのファイルの読み込みや移行の方法は、ファイルが現在格納されている場所によって異なります。The method that you choose for loading or migrating files into a FileTable depends on where the files are currently stored.

ファイルの現在の場所Current location of files 移行のオプションOptions for migration
ファイルは現在、ファイル システム内に格納されている。Files are currently stored in the file system.

SQL ServerSQL Server にはファイルに関する情報がありません。has no knowledge of the files.
FileTable は Windows ファイル システムにおいてフォルダーとして表示されるため、ファイルの移動またはコピーに使用できる任意の方法で、ファイルを新しい FileTable に簡単に読み込むことができます。Since a FileTable appears as a folder in the Windows file system, you can easily load files into a new FileTable by using any of the available methods for moving or copying files. これらの方法には、Windows エクスプローラー、コマンド ライン オプション (xcopy、robocopy)、およびカスタム スクリプトまたはアプリケーションが含まれます。These methods include Windows Explorer, command-line options including xcopy and robocopy, and custom scripts or applications.

既存のフォルダーを FileTable に変換することはできません。You cannot convert an existing folder to a FileTable.
ファイルは現在、ファイル システム内に格納されている。Files are currently stored in the file system.

SQL ServerSQL Server には、ファイルへのポインターが格納されたメタデータのテーブルが含まれています。contains a table of metadata that contains pointers to the files.
まず、前の項目で示したいずれかの方法を使用して、ファイルを移動またはコピーします。The first step is to move or copy the files by using one of the preceding methods mentioned.

次に、ファイルの新しい場所を指すように既存のメタデータのテーブルを更新します。The second step is to update the existing table of metadata to point to the new location of the files.

詳細については、「例:ファイルをファイル システムから FileTable に移行する」(この記事内) をご覧ください。For more information, see Example: Migrating Files from the File System into a FileTable in this article.

方法:FileTable にファイルを読み込むHow To: Load Files into a FileTable

次の方法を使って、ファイルを FileTable に読み込むことができます。You can use the following methods to load files into a FileTable:

  • Windows エクスプローラーで、基になるフォルダーから新しい FileTable フォルダーにファイルをドラッグ アンド ドロップします。Drag and drop files from the source folders to the new FileTable folder in Windows Explorer.

  • コマンド プロンプト、バッチ ファイル、またはスクリプトでコマンド ライン オプション (MOVE、COPY、XCOPY、ROBOCOPY など) を使います。Use command-line options such as MOVE, COPY, XCOPY, or ROBOCOPY from the command prompt or in a batch file or script.

  • カスタム アプリケーションを作成して、C# または Visual Basic.NET のファイルを移動またはコピーします。Write a custom application to move or copy the files in C# or Visual Basic.NET. System.IO 名前空間からメソッドを呼び出します。Call methods from the System.IO namespace.

例: ファイルをファイル システムから FileTable に移行するExample: Migrating Files from the File System into a FileTable

このシナリオでは、ファイルはファイル システムに格納されていて、このファイルへのポインターを含むメタデータのテーブルが SQL ServerSQL Server に配置されています。In this scenario, your files are stored in the file system, and you have a table of metadata in SQL ServerSQL Server that contains pointers to the files. ここでは、ファイルを FileTable に移動した後、メタデータ内の各ファイルの元の UNC パスを FileTable の UNC パスに置き換えます。You want to move the files into a FileTable, and then replace the original UNC path for each file in the metadata with the FileTable UNC path. この操作を行うには、GetPathLocator (Transact-SQL) 関数を使用します。The GetPathLocator (Transact-SQL) function helps you to achieve this goal.

この例では、写真に関するデータが含まれている PhotoMetadataという名前の既存のデータベース テーブルがあると仮定しています。For this example, assume that there is an existing database table, PhotoMetadata, which contains data about photographs. このテーブルには、.jpg ファイルへの実際の UNC パスを含む varchar (512) 型の列 UNCPathがあります。This table has a column UNCPath of type varchar(512) which contains the actual UNC path to a .jpg file.

画像ファイルをファイル システムから FileTable に移行するには、次のことを実行する必要があります。To migrate the image files from the file system into a FileTable, you have to do the following things:

  1. ファイルを格納する新しい FileTable を作成します。Create a new FileTable to hold the files. この例では、 dbo.PhotoTableというテーブル名を使用しますが、テーブルを作成するコードは示されていません。This example uses the table name, dbo.PhotoTable, but does not show the code to create the table.

  2. xcopy または同様のツールを使用して、ディレクトリ構造を保ったまま .jpg ファイルを FileTable のルート ディレクトリにコピーします。Use xcopy or a similar tool to copy the .jpg files, with their directory structure, into the root directory of the FileTable.

  3. 次の例のようなコードを使って、PhotoMetadata テーブル内のメタデータを修正します。Fix the metadata in the PhotoMetadata table, by using code similar to the following example:

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. このページの下部にある [フィードバック] セクション内で [このページ] ボタンをクリックしてください。You can click the This page button in the Feedback section at the bottom of this page. SQL に関するフィードバックのすべての項目に目を通しています (通常は翌日)。We read every item of feedback about SQL, typically the next day. よろしくお願いいたします。Thanks.

--  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 へのファイルの一括読み込みBulk Loading Files into a FileTable

FileTable の一括操作は通常のテーブルの動作と同じですが、次の制限があります。A FileTable behaves like a normal table for bulk operations, with the following qualifications:

FileTable には、ファイル/ディレクトリ名前空間の整合性を確保するためにシステムによって定義された制約があります。A FileTable has system-defined constraints that ensure that the integrity of the file and directory namespace is maintained. これらの制約は、FileTable に一括で読み込まれるデータに対しても検証されます。These constraints have to be verified on the data bulk loaded into the FileTable. 一部の一括挿入操作ではテーブル制約の無視が許可されるため、次の要件が適用されます。Since some bulk insert operations allow table constraints to be ignored, the following requirements are enforced.

  • 制約が適用される一括読み込み操作は、FileTable でも他のテーブルに対する操作と同じように実行できます。Bulk loading operations that enforce constraints can be run against a FileTable as against any other table. このカテゴリには以下の操作が含まれます。This category includes the following operations:

    • CHECK_CONSTRAINTS 句を含む bcpbcp with CHECK_CONSTRAINTS clause.

    • CHECK_CONSTRAINTS 句を含む BULK INSERTBULK INSERT with CHECK_CONSTRAINTS clause.

    • INSERT INTO ... IGNORE_CONSTRAINTS 句を含まない SELECT * FROM OPENROWSET(BULK ...)。INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) without IGNORE_CONSTRAINTS clause.

  • FileTable のシステム定義の制約が無効化されない限り、制約が適用されない一括読み込み操作は失敗します。Bulk loading operations that do not enforce constraints fail unless the FileTable system-defined constraints have been disabled. このカテゴリには以下の操作が含まれます。This category includes the following operations:

    • CHECK_CONSTRAINTS 句を含まない bcpbcp without CHECK_CONSTRAINTS clause.

    • CHECK_CONSTRAINTS 句を含まない BULK INSERTBULK INSERT without CHECK_CONSTRAINTS clause.

    • INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) (IGNORE_CONSTRAINTS 句を含む)。INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...) with IGNORE_CONSTRAINTS clause.

方法:FileTable へのファイルの一括読み込みを行うHow To: Bulk Load Files into a FileTable

ファイルを FileTable に一括読み込みするには、次の方法を使用できます。You can use various methods to bulk load files into a FileTable:

  • bcpbcp

    • CHECK_CONSTRAINTS 句を指定して呼び出します。Call with the CHECK_CONSTRAINTS clause.

    • FileTable 名前空間を無効にし、 CHECK_CONSTRAINTS 句を指定せずに呼び出します。Disable the FileTable namespace and call without the CHECK_CONSTRAINTS clause. 次に、FileTable 名前空間を再有効化します。Then re-enable the FileTable namespace.

  • BULK INSERTBULK INSERT

    • CHECK_CONSTRAINTS 句を指定して呼び出します。Call with the CHECK_CONSTRAINTS clause.

    • FileTable 名前空間を無効にし、 CHECK_CONSTRAINTS 句を指定せずに呼び出します。Disable the FileTable namespace and call without the CHECK_CONSTRAINTS clause. 次に、FileTable 名前空間を再有効化します。Then re-enable the FileTable namespace.

  • INSERT INTO ...SELECT * FROM OPENROWSET(BULK ...)INSERT INTO ... SELECT * FROM OPENROWSET(BULK ...)

    • IGNORE_CONSTRAINTS 句を指定して呼び出します。Call with the IGNORE_CONSTRAINTS clause.

    • FileTable 名前空間を無効にし、 IGNORE_CONSTRAINTS 句を指定せずに呼び出します。Disable the FileTable namespace and call without the IGNORE_CONSTRAINTS clause. 次に、FileTable 名前空間を再有効化します。Then re-enable the FileTable namespace.

FileTable 制約の無効化の詳細については、「 FileTable の管理」を参照してください。For information about disabling the FileTable constraints, see Manage FileTables.

方法:一括読み込みのための FileTable の制約を無効化するHow To: Disable FileTable Constraints for Bulk Loading

システム定義の制約を一時的に無効化すると、制約の適用というオーバーヘッドなしで、FileTable へのファイルの一括読み込みを行うことができます。To bulk load files into a FileTable without the overhead of enforcing the system-defined constraints, you can temporarily disable the constraints. 詳細については、「 FileTable の管理」を参照してください。For more information, see Manage FileTables.

参照See Also

Transact SQL を使用した FileTable へのアクセス Access FileTables with Transact-SQL
ファイル I/O API を使用した FileTable へのアクセスAccess FileTables with File Input-Output APIs