GetFileNamespacePath (Transact-SQL)

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

语法

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

参数

  • column-name
    FileTable 中 VARBINARY(MAX) file_stream 列的列名称。

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

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

    说明

    0

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

    此为默认值。

    1

    返回以 \\computer_name 开头的完整 UNC 路径。

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

    说明

    0

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

    \\SERVERNAME\MSSQLSERVER\MyDocumentDB

    此为默认值。

    1

    返回未经转换的服务器名称,例如:

    \\ServerName\MSSQLSERVER\MyDocumentDB

    2

    返回完整的服务器路径,例如:

    \\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDB

返回类型

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 MyDocumentDB;
@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\MyDocumentDB\MyFileTable\MyDocDirectory\document.docx”
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore
WHERE Name = N’document.docx’;

请参阅

概念

在 FileTable 中使用目录和路径