PathName (Transact-SQL)

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

主题链接图标Transact-SQL 语法约定

语法

column_name.PathName (@option)

参数

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

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

  • @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

返回类型

nvarchar(max)

返回值

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

注释

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

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

示例

A. 读取 FILESTREAM BOLB 的路径

下例将 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);
INSERT INTO TABLE1 VALUES(2, NEWID(), 0x00);
INSERT INTO TABLE1 VALUES(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