FileTable 内のディレクトリとパスの操作Work with Directories and Paths in 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 the directory structure in which the files are stored in FileTables.

方法:FileTable 内のディレクトリとパスの操作How To: Work with Directories and Paths in FileTables

次の 3 つの関数を使用して、 Transact-SQLTransact-SQLで FileTable ディレクトリを操作することができます。You can use the following 3 functions to work with FileTable directories in Transact-SQLTransact-SQL:

目的To get this result 使用する関数Use this function
特定の FileTable または現在のデータベースの、ルート レベルの UNC パスを取得する。Get the root-level UNC path for a specific FileTable or for the current database. FileTableRootPath (Transact-SQL)FileTableRootPath (Transact-SQL)
FileTable 内のファイルまたはディレクトリの絶対 UNC パスまたは相対 UNC パスを取得する。Get an absolute or relative UNC path for a file or directory in a FileTable. GetFileNamespacePath (Transact-SQL)GetFileNamespacePath (Transact-SQL)
パスを指定して、FileTable 内の指定されたファイルまたはディレクトリのパス ロケーター ID 値を取得する。Get the path locator ID value for the specified file or directory in a FileTable, by providing the path. GetPathLocator (Transact-SQL)GetPathLocator (Transact-SQL)

方法:相対パスを使用して移植可能なコードを実現するHow to: Use Relative Paths for Portable Code

コードとアプリケーションが現在のコンピューターとデータベースから切り離された状態を維持するには、絶対ファイル パスに依存したコードを記述しないでください。To keep code and applications independent of the current computer and database, avoid writing code that relies on absolute file paths. 代わりに、以下の例に示すように FileTableRootPath (Transact-SQL) 関数および GetFileNamespacePath (Transact-SQL)関数を併用して、実行時にファイルの完全なパスを取得します。Instead, get the complete path for a file at run time by using the FileTableRootPath (Transact-SQL) and GetFileNamespacePath (Transact-SQL)) functions together, as shown in the following example. 既定では、 GetFileNamespacePath 関数は、データベースのルート パスの下のファイルの相対パスを返します。By default, the GetFileNamespacePath function returns the relative path of the file under the root path for the database.

USE database_name;  
DECLARE @root nvarchar(100);  
DECLARE @fullpath nvarchar(1000);  
  
SELECT @root = FileTableRootPath();  
SELECT @fullpath = @root + file_stream.GetFileNamespacePath()  
    FROM filetable_name  
    WHERE name = N'document_name';  
  
PRINT @fullpath;  
GO  

重要な制限Important restrictions

入れ子のレベルNesting level

重要!!IMPORTANT!! FileTable ディレクトリ内には、15 レベルを超えるサブディレクトリを格納できません。You cannot store more than 15 levels of subdirectories in the FileTable directory. 15 レベルのサブディレクトリを格納した場合、最も深いレベルにファイルを置くことはできません。そのファイルが、さらに深いレベルを表すことになるためです。When you store 15 levels of subdirectories, then the lowest level cannot contain files, since these files would represent an additional level.

完全なパス名の長さLength of full path name

重要!!IMPORTANT!! NTFS ファイル システムは、Windows シェルおよび大部分の Windows API の上限である 260 文字よりも長いパス名をサポートします。The NTFS file system supports path names that are much longer than the 260-character limit of the Windows shell and most Windows APIs. そのため、Transact-SQL を使用して、完全なパス名が 260 文字を超えているために Windows エクスプローラーや他の多くの Windows アプリケーションで表示したり開いたりできないファイルを、FileTable のファイル階層内に作成できます。Therefore it is possible to create files in the file hierarchy of a FileTable by using Transact-SQL that you cannot view or open with Windows Explorer or many other Windows applications, because the full path name exceeds 260 characters. ただし、Transact-SQL を使用してこれらのファイルに引き続きアクセスできます。However you can continue to access these files by using Transact-SQL.

FileTable に格納されているアイテムへの完全なパスThe full path to an item stored in a FileTable

FileTable 内のファイルまたはディレクトリへの完全なパスには、次の要素が先頭に付きます。The full path to a file or directory stored in a FileTable begins with the following elements:

  1. SQL ServerSQL Server インスタンス レベルでの FILESTREAM ファイル I/O アクセスが有効になっている共有。The share enabled for FILESTREAM file I/O access at the SQL ServerSQL Server instance level.

  2. データベース レベルで指定された DIRECTORY_NAMEThe DIRECTORY_NAME specified at the database level.

  3. FileTable レベルで指定された FILETABLE_DIRECTORYThe FILETABLE_DIRECTORY specified at the FileTable level.

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。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.

以上を組み合わせた階層は、次のようになります。The resulting hierarchy looks like this:

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

このディレクトリ階層は、FileTable のファイル名前空間のルートを構成します。This directory hierarchy forms the root of the FileTable's file namespace. このディレクトリ階層の下に、FileTable の FILESTREAM データがファイルとして格納されます。また、サブディレクトリとしても格納され、ファイルおよびサブディレクトリを格納することができます。Under this directory hierarchy, the FILESTREAM data for the FileTable is stored as files, and as subdirectories which can also contain files and subdirectories.

インスタンス レベルの FILESTREAM 共有の下に作成されたディレクトリ階層は仮想ディレクトリ階層であることに注意してください。It is important to keep in mind that the directory hierarchy created under the instance-level FILESTREAM share is a virtual directory hierarchy. 階層は SQL ServerSQL Server データベースに格納され、NTFS ファイル システム内には物理的に表示されません。This hierarchy is stored in the SQL ServerSQL Server database and is not represented physically in the NTFS file system. FILESTREAM 共有の下にあるファイルおよびディレクトリ、および FILESTREAM 共有に含まれる FileTables 内のファイルおよびディレクトリにアクセスするすべての操作は、ファイル システムに埋め込まれた SQL ServerSQL Server コンポーネントによってインターセプトされ、処理されます。All operations that access files and directories under the FILESTREAM share and in the FileTables that it contains are intercepted and handled by a SQL ServerSQL Server component embedded in the file system.

インスタンス レベル、データベース レベル、および FileTable レベルのルート ディレクトリのセマンティクスThe semantics of the root directories at the instance, database, and FileTable levels

このディレクトリ階層は次のセマンティクスに従います。This directory hierarchy observes the following semantics:

  • インスタンス レベルの FILESTREAM 共有は管理者によって構成され、サーバーのプロパティとして格納されます。The instance-level FILESTREAM share is configured by an administrator and stored as a property of the server. この共有の名前は、 SQL ServerSQL Server 構成マネージャーを使用して変更できます。You can rename this share by using SQL ServerSQL Server Configuration Manager. 名前変更の操作は、サーバーを再起動するまで有効になりません。A renaming operation does not take effect until the server is restarted.

  • 新しいデータベースを作成した場合、データベース レベルの DIRECTORY_NAME は既定で null です。The database-level DIRECTORY_NAME is null by default when you create a new database. 管理者は ALTER DATABASE ステートメントを使用して、この名前を設定または変更することができます。An administrator can set or change this name by using the ALTER DATABASE statement. 名前は、インスタンス内で一意であることが必要です (大文字と小文字は区別されません)。The name must be unique (in a case-insensitive comparison) in that instance.

  • 通常、 FILETABLE_DIRECTORY 名は、FileTable を作成する際に CREATE TABLE ステートメントの中で指定します。You typically provide the FILETABLE_DIRECTORY name as part of the CREATE TABLE statement when you create a FileTable. この名前は、 ALTER TABLE コマンドを使用して変更することができます。You can change this name by using the ALTER TABLE command.

  • ファイル I/O 操作でこれらのルート ディレクトリの名前を変更することはできません。You cannot rename these root directories through file I/O operations.

  • 排他的なファイル ハンドルを使用してこれらのルート ディレクトリを開くことはできません。You cannot open these root directories with exclusive file handles.

FileTable スキーマの is_directory 列The is_directory column in the FileTable schema

次の表に、 is_directory 列と、FileTable の FILESTREAM データを格納する file_stream 列との間のやり取りを示します。The following table describes the interaction between the is_directory column and the file_stream column that contains the FILESTREAM data in a FileTable.

is_directory の値is_directory value file_stream の値file_stream value 動作Behavior
FALSEFALSE NULLNULL これは、システム定義の制約によってキャッチされる無効な組み合わせです。This is an invalid combination that will be caught by a system-defined constraint.
FALSEFALSE <値><value> アイテムはファイルを表します。The item represents a file.
TRUETRUE NULLNULL アイテムはディレクトリを表します。The item represents a directory.
TRUETRUE <値><value> これは、システム定義の制約によってキャッチされる無効な組み合わせです。This is an invalid combination that will be caught by a system-defined constraint.

AlwaysOn 可用性グループでの仮想ネットワーク名 (VNN) の使用Using Virtual Network Names (VNNs) with AlwaysOn Availability Groups

FILESTREAM データまたは FileTable データを格納するデータベースが AlwaysOn 可用性グループに属する場合、次の処理が行われます。When the database that contains FILESTREAM or FileTable data belongs to an AlwaysOn availability group:

参照See Also

FileTable の前提条件の有効化 Enable the Prerequisites for FileTable
FileTable の作成、変更、および削除 Create, Alter, and Drop FileTables
Transact SQL を使用した FileTable へのアクセス Access FileTables with Transact-SQL
ファイル I/O API を使用した FileTable へのアクセスAccess FileTables with File Input-Output APIs