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