次の方法で共有


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’;

関連項目

概念

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