GetFileNamespacePath (Transact-SQL)
適用対象: SQL Server
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\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';