FileTableRootPath (Transact-SQL)

適用対象:SQL Server

特定の FileTable または現在のデータベースのルート レベルの UNC パスを返します。

構文

  
FileTableRootPath ( [ '[schema_name.]FileTable_name' ], @option )  

引数

FileTable_name
FileTable の名前。 FileTable_namenvarchar 型です。 これは省略可能なパラメーターです。 既定値は現在のデータベースです。 schema_nameの指定も省略可能です。 既定のパラメーター値を使用するには 、FileTable_name に NULL を渡すことができます

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

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

\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase

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

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

\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase

戻り値の型

nvarchar (4000)

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

全般的な解説

次のいずれかの条件に該当する場合、 FileTableRootPath 関数は NULL を返します。

  • FileTable_nameの値が無効です。

  • 呼び出し元に、指定されたテーブルまたは現在のデータベースを参照するための十分な権限がない。

  • database_directoryの FILESTREAM オプションは、現在のデータベースに対して設定されていません。

詳しくは、「 Work with Directories and Paths in FileTables」をご覧ください。

推奨する運用方法

コードとアプリケーションが現在のコンピューターとデータベースから切り離された状態を維持するには、絶対ファイル パスに依存したコードを記述しないでください。 代わりに、次の例に示すように、 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';  

セキュリティ

アクセス許可

FileTableRootPath 関数には、次のものが必要です。

  • 特定の FileTable のルート パスを取得するための FileTable に対する SELECT アクセス許可。

  • 現在のデータベースの ルート パスを取得するためのアクセス許可をdb_datareader以上にします。

次の例では、 FileTableRootPath 関数を呼び出す方法を示します。

USE MyDocumentDatabase;  
-- returns "\\MYSERVER\MSSQLSERVER\MyDocumentDatabase"  
SELECT FileTableRootPath();  
  
-- returns "\\MYSERVER\MSSQLSERVER\MyDocumentDatabase\MyFileTable"  
SELECT FileTableRootPath(N'dbo.MyFileTable');  
  
-- returns "\\MYSERVER\MSSQLSERVER\MyDocumentDatabase\MyFileTable"  
SELECT FileTableRootPath(N'MyFileTable');  

参照

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