GetFileNamespacePath (Transact-SQL)

适用于SQL Server

返回 FileTable 中文件或目录的 UNC 路径。

语法

  
<column-name>.GetFileNamespacePath(is_full_path, @option)  

参数

column-name
FILETable 中 VARBINARY(MAX) 的列名file_stream 列。

列名值必须是有效的列名。 它不能是表达式,也不能是从其他数据类型的列转换或强制转换的值。

is_full_path
整数表达式,指定是返回相对路径还是绝对路径。 is_full_path可以具有以下值之一:

说明
0 返回数据库级目录内的相对路径。

此为默认值。
1 返回以 \\computer_name 开头的完整 UNC 路径。

@option
一个整数表达式,定义路径的服务器组件应如何进行格式化。 @option可以具有以下值之一:

说明
0 返回转换为 NetBIOS 格式的服务器名称,例如:

\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase

这是默认值。
1 返回未经转换的服务器名称,例如:

\\ServerName\MSSQLSERVER\MyDocumentDatabase
2 返回完整的服务器路径,例如:

\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase

返回类型

nvarchar(max)

如果 SQL Server 实例在故障转移群集中聚集,则作为此路径的一部分返回的计算机名称是群集实例的虚拟主机名。

当数据库属于 AlwaysOn 可用性组时, FileTableRootPath 函数将返回虚拟网络名称(VNN),而不是计算机名称。

一般备注

GetFileNamespacePath 函数返回的路径是采用以下格式的逻辑目录或文件路径:

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\...

此逻辑路径不直接对应于某一物理 NTFS 路径。 它由 FILESTREAM 的文件系统筛选器驱动程序和 FILESTREAM 代理转换为物理路径。 逻辑路径和物理路径之间的这种分离使 SQL Server 能够在内部重新组织数据,而不会影响路径的有效性。

最佳方案

若要使代码和应用程序独立于当前的计算机和数据库,应避免编写依赖于绝对文件路径的代码。 相反,使用 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';  

注解

示例

以下示例演示如何调用 GetFileNamespacePath 函数以获取 FileTable 中文件或目录的 UNC 路径。

-- returns the relative path of the form "\MyFileTable\MyDocDirectory\document.docx"  
SELECT file_stream.GetFileNamespacePath() AS FilePath FROM DocumentStore  
WHERE Name = N'document.docx';  
  
-- returns "\\MyServer\MSSQLSERVER\MyDocumentDatabase\MyFileTable\MyDocDirectory\document.docx"  
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore  
WHERE Name = N'document.docx';  

另请参阅

Work with Directories and Paths in FileTables