FileTableRootPath (Transact-SQL)
適用対象: SQL サーバー
特定の FileTable または現在のデータベースのルート レベルの UNC パスを返します。
構文
FileTableRootPath ( [ '[schema_name.]FileTable_name' ], @option )
引数
FileTable_name
FileTable の名前。 FileTable_name は nvarchar 型です。 これは省略可能なパラメーターです。 既定値は現在のデータベースです。 schema_nameの指定も省略可能です。 既定のパラメーター値を使用するには、 FileTable_name に NULL を渡すことができます
@option
パスのサーバー コンポーネントの書式設定方法を定義する整数式。 @option には、次のいずれかの値を指定できます。
Value | 説明 |
---|---|
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');