FileTableRootPath (Transact-SQL)

适用于:SQL Server

返回特定 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\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

最佳方案

若要使代码和应用程序独立于当前的计算机和数据库,应避免编写依赖于绝对文件路径的代码。 相反,请在运行时同时使用 FileTableRootPathGetFileNamespacePath 函数获取文件的完整路径,如以下示例所示。 默认情况下, 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 的 SELECT 权限以获取特定 FileTable 的根路径。

  • 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 中使用目录和路径