特定の FileTable または現在のデータベースの、ルート レベルの UNC パスを返します。
構文
FileTableRootPath ( [ ‘[schema_name.]FileTable_name’ ], @option )
引数
FileTable_name
FileTable の名前。 FileTable_name のデータ型は nvarchar です。 このパラメーターはオプションです。 既定値は、現在のデータベースです。 schema_name の指定もオプションです。 FileTable_name に NULL を渡すと、既定のパラメーター値を使用できます。@option
パスのサーバー コンポーネントの書式設定の方法を定義する整数式です。 @option は次のいずれかの値になります。値
説明
0
サーバー名を次のような NetBIOS 形式に変換して返します。
\\SERVERNAME\MSSQLSERVER\MyDocumentDB
これは既定値です。
1
次のように、サーバー名を変換せずに返します。
\\ServerName\MSSQLSERVER\MyDocumentDB
2
次のような、完全なサーバー パスを返します。
\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDB
戻り値の型
nvarchar(4000)
データベースが AlwaysOn 可用性グループに属する場合、FileTableRootPath 関数はコンピューター名ではなく仮想ネットワーク名 (VNN) を返します。
全般的な解説
次のいずれかの条件に該当する場合、FileTableRootPath 関数は NULL を返します。
FileTable_name の値が無効である。
呼び出し元に、指定されたテーブルまたは現在のデータベースを参照するための十分な権限がない。
database_directory の FILESTREAM オプションが、現在のデータベース用に設定されていない。
詳細については、「FileTable 内のディレクトリとパスの操作」を参照してください。
ベスト プラクティス
コードとアプリケーションが現在のコンピューターとデータベースから切り離された状態を維持するには、絶対ファイル パスに依存したコードを記述しないでください。 代わりに、次の例に示すように、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’;
セキュリティ
権限
FileTableRootPath 関数には、以下の要件があります。
特定の FileTable のルート パスを取得するために、FileTable に対する SELECT 権限が必要です。
現在のデータベースのルート パスを取得するために、db_datareader 以上の権限が必要です。
使用例
次の例では、FileTableRootPath 関数を呼び出す方法を示します。
USE MyDocumentDB;
-- returns “\\MYSERVER\MSSQLSERVER\MyDocumentDB”
SELECT FileTableRootPath();
-- returns “\\MYSERVER\MSSQLSERVER\MyDocumentDB\MyFileTable”
SELECT FileTableRootPath(N'dbo.MyFileTable');
-- returns “\\MYSERVER\MSSQLSERVER\MyDocumentDB\MyFileTable”
SELECT FileTableRootPath(N'MyFileTable');