FileTableRootPath (Transact-SQL)

返回特定 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 的 SELECT 权限以获取特定 FileTable 的根路径。

  • 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');

请参阅

概念

在 FileTable 中使用目录和路径