GetFileNamespacePath (Transact-SQL)

適用対象:SQL Server

FileTable 内のファイルまたはディレクトリの UNC パスを返します。

構文

  
<column-name>.GetFileNamespacePath(is_full_path, @option)  

引数

column-name
FileTable の VARBINARY(MAX) file_stream 列の列名。

列名の値は、有効な列名である必要があります。 式、または別のデータ型の列から変換またはキャストされた値を指定することはできません。

is_full_path
相対パスと絶対パスのどちらを返すかを指定する整数式です。 is_full_path には、次のいずれかの値を指定できます。

説明
0 データベース レベルのディレクトリ内の相対パスを返します。

これは、既定値です。
1 で始まる完全な UNC パスを返します \\computer_name

@option
パスのサーバー コンポーネントの書式設定の方法を定義する整数式です。 @option には、次のいずれかの値を指定できます。

説明
0 サーバー名を次のような NetBIOS 形式に変換して返します。

\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase

これが既定値です。
1 次のように、サーバー名を変換せずに返します。

\\ServerName\MSSQLSERVER\MyDocumentDatabase
2 次のような、完全なサーバー パスを返します。

\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase

戻り値の型

nvarchar(max)

SQL Server インスタンスがフェールオーバー クラスターにクラスター化されている場合、このパスの一部として返されるマシン名は、クラスター化されたインスタンスの仮想ホスト名です。

データベースがAlways On可用性グループに属している場合、FileTableRootPath 関数はコンピューター名ではなく仮想ネットワーク名 (VNN) を返します。

全般的な解説

GetFileNamespacePath 関数が返すパスは、次の形式の論理ディレクトリまたはファイル パスです。

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

この論理パスは、物理 NTFS パスに直接対応していません。 これは、FILESTREAM のファイル システム フィルター ドライバーと FILESTREAM エージェントによって物理パスに変換されます。 論理パスと物理パスを分離することで、SQL Serverパスの有効性に影響を与えることなく、内部的にデータを再構成できます。

推奨する運用方法

コードとアプリケーションが現在のコンピューターとデータベースから切り離された状態を維持するには、絶対ファイル パスに依存したコードを記述しないでください。 代わりに、次の例に示すように、 FileTableRootPath 関数と GetFileNamespacePath 関数を組み合わせて使用して、実行時にファイルの完全なパスを取得します。 既定では、 GetFileNamespacePath 関数は、データベースのルート パスの下のファイルの相対パスを返します。

USE MyDocumentDatabase;  
@root varchar(100)  
SELECT @root = FileTableRootPath();  
  
@fullPath = varchar(1000);  
SELECT @fullPath = @root + file_stream.GetFileNamespacePath() FROM DocumentStore  
WHERE Name = N'document.docx';  

解説

次の例では、 GetFileNamespacePath 関数を呼び出して、FileTable 内のファイルまたはディレクトリの UNC パスを取得する方法を示します。

-- returns the relative path of the form "\MyFileTable\MyDocDirectory\document.docx"  
SELECT file_stream.GetFileNamespacePath() AS FilePath FROM DocumentStore  
WHERE Name = N'document.docx';  
  
-- returns "\\MyServer\MSSQLSERVER\MyDocumentDatabase\MyFileTable\MyDocDirectory\document.docx"  
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore  
WHERE Name = N'document.docx';  

参照

FileTable 内のディレクトリとパスの操作