GetFileNamespacePath (Transact-SQL)
FileTable 内のファイルまたはディレクトリの UNC パスを返します。
構文
<column-name>.GetFileNamespacePath(is_full_path, @option)
引数
column-name
FileTable 内の VARBINARY(MAX) file_stream 列の列名です。column-name の値は、有効な列名である必要があります。 別のデータ型の列から変換またはキャストされた値や、式は指定できません。
is_full_path
相対パスと絶対パスのどちらを返すかを指定する整数式です。 is_full_path は次のいずれかの値になります。値
説明
0
データベース レベルのディレクトリ内の相対パスを返します。
これは既定値です。
1
\\computer_name で始まる完全な UNC パスを返します。
@option
パスのサーバー コンポーネントの書式設定の方法を定義する整数式です。 @option は次のいずれかの値になります。値
説明
0
サーバー名を次のような NetBIOS 形式に変換して返します。
\\SERVERNAME\MSSQLSERVER\MyDocumentDB
これは既定値です。
1
次のように、サーバー名を変換せずに返します。
\\ServerName\MSSQLSERVER\MyDocumentDB
2
次のような、完全なサーバー パスを返します。
\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDB
戻り値の型
nvarchar(max)
SQL Server インスタンスがフェールオーバー クラスターにクラスター化されている場合、このパスの一部として返されるコンピューター名は、クラスター化インスタンスの仮想ホスト名になります。
データベースが AlwaysOn 可用性グループに属する場合、FileTableRootPath 関数はコンピューター名ではなく仮想ネットワーク名 (VNN) を返します。
全般的な解説
GetFileNamespacePath 関数から返されるパスは、次の形式の論理ディレクトリまたはファイル パスです。
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\...
この論理パスは、物理的な NTFS パスに直接対応しません。 このパスは FILESTREAM のファイル システム フィルター ドライバーと FILESTREAM エージェントによって物理パスに変換されます。 論理パスと物理パスを分離することにより、SQL Server は、パスの有効性に影響を与えることなく内部的にデータを再構成できます。
ベスト プラクティス
コードとアプリケーションが現在のコンピューターとデータベースから切り離された状態を維持するには、絶対ファイル パスに依存したコードを記述しないでください。 代わりに、次の例に示すように、FileTableRootPath 関数と GetFileNamespacePath 関数を併用して、実行時にファイルの完全なパスを取得します。 既定では、GetFileNamespacePath 関数はデータベースのルート パスにあるファイルの相対パスを返します。
USE MyDocumentDB;
@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\MyDocumentDB\MyFileTable\MyDocDirectory\document.docx”
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore
WHERE Name = N’document.docx’;