PathName (Transact-SQL)

适用范围:SQL Server

返回 FILESTREAM 二进制大型对象 (BLOB) 路径。 OpenSqlFilestream API 使用此路径返回应用程序可以使用 Win32 API 处理 BLOB 数据的句柄。 PathName 是只读的。

Transact-SQL 语法约定

语法

  
column_name.PathName ( @option [ , use_replica_computer_name ] )  

参数

column_name
varbinary(max) FILESTREAM 列的列名。 column_name 必须是列名。 它不能是表达式,也不能是 CAST 或 CONVERT 语句的结果。

请求任何其他数据类型的列的 PathName,或者对于 没有 FILESTREAM 存储属性的 varbinary(max) 列,将导致查询编译时错误。

@option
一个整数 表达式 ,用于定义如何设置路径的服务器组件的格式。 @option 可以是以下值之一。 默认值为 0。

说明
0 返回转换为 BIOS 格式的服务器名称,例如:\\SERVERNAME\MSSQLSERVER\v1\Archive\dbo\Records\Chart\A73F19F7-38EA-4AB0-BB89-E6C545DBD3F9
1 返回未经转换的服务器名称,例如:\\ServerName\MSSQLSERVER\v1\Archive\dbo\Records\Chart\A73F1
2 返回完整的服务器路径,例如:\\ServerName.MyDomain.com\MSSQLSERVER\v1\Archive\dbo\Records\Chart\A73F19F7-38EA-4AB0-BB89-E6C545DBD3F9

use_replica_computer_name
一个位值,该值定义应在 AlwaysOn 可用性组中返回服务器名称的方式。

如果数据库不属于 AlwaysOn 可用性组,则忽略此参数的值。 在路径中始终使用计算机名称。

当数据库属于 AlwaysOn 可用性组时,use_replica_computer_name的值对 PathName 函数的输出有以下影响:

说明
未指定。 函数返回路径中的虚拟网络名称 (VNN)。
0 函数返回路径中的虚拟网络名称 (VNN)。
1 函数返回路径中的计算机名称。

返回类型

nvarchar(max)

返回值

返回的值是 BLOB 的完全限定逻辑路径或 NETBIOS 路径。 PathName 不返回 IP 地址。 尚未创建 FILESTREAM BLOB 时返回 NULL。

注解

ROWGUID 列必须在任何调用 PathName 的查询中可见。

只能使用 Transact-SQL 创建 FILESTREAM BLOB。

示例

A. 读取 FILESTREAM BLOB 的路径

下例将 PathName 赋给一个 nvarchar(max) 类型的变量。

DECLARE @PathName nvarchar(max);  
SET @PathName = (  
    SELECT TOP 1 photo.PathName()  
    FROM dbo.Customer  
    WHERE LastName = 'CustomerName'  
    );  

B. 在表中显示 FILESTREAM BLOB 的路径

下面的示例创建并显示三个 FILESTREAM BLOB 的路径。

-- Create a FILESTREAM-enabled database.  
-- The c:\data directory must exist.  
CREATE DATABASE PathNameDB  
ON  
PRIMARY ( NAME = ArchX1,  
    FILENAME = 'c:\data\archdatP1.mdf'),  
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = ArchX3,  
    FILENAME = 'c:\data\filestreamP1')  
LOG ON  ( NAME = ArchlogX1,  
    FILENAME = 'c:\data\archlogP1.ldf');  
GO  
  
USE PathNameDB;  
GO  
  
-- Create a table, add some records, and  
-- create the associated FILESTREAM  
-- BLOB files.  
  
CREATE TABLE TABLE1  
    (  
        ID int,  
        RowGuidColumn UNIQUEIDENTIFIER  
                      NOT NULL UNIQUE ROWGUIDCOL,  
        FILESTREAMColumn varbinary(MAX) FILESTREAM  
    );  
GO  
  
INSERT INTO TABLE1 VALUES  
 (1, NEWID(), 0x00)  
,(2, NEWID(), 0x00)  
,(3, NEWID(), 0x00);  
GO  
  
SELECT FILESTREAMColumn.PathName() AS 'PathName' FROM TABLE1;  
  
--Results  
--PathName  
------------------------------------------------------------------------------------------------------------  
--\\SERVER\MSSQLSERVER\v1\PathNameExampleDB\dbo\TABLE1\FILESTREAMColumn\DD67C792-916E-4A76-8C8A-4A85DC5DB908  
--\\SERVER\MSSQLSERVER\v1\PathNameExampleDB\dbo\TABLE1\FILESTREAMColumn\2907122B-2560-4CB9-86DC-FBE7ABA1843B  
--\\SERVER\MSSQLSERVER\v1\PathNameExampleDB\dbo\TABLE1\FILESTREAMColumn\922BE0E0-CAB9-4403-90BF-945BD258E4BC  
--  
--(3 row(s) affected)  
GO  
  
--Drop the database to clean up.  
USE master;  
GO  
DROP DATABASE PathNameDB;  

另请参阅

二进制大型对象 (Blob) 数据 (SQL Server)
GET_FILESTREAM_TRANSACTION_CONTEXT (Transact-SQL)
使用 OpenSqlFilestream 访问 FILESTREAM 数据