PathName (Transact-SQL)

傳回 FILESTREAM 二進位大型物件 (BLOB) 的路徑。 OpenSqlFilestream API 會使用這個路徑來傳回一個控制代碼,應用程式可使用此控制代碼來透過 Win32 API 處理 BLOB 資料。 PathName 是唯讀的。

適用於:SQL Server (SQL Server 2008 至目前版本)。

主題連結圖示 Transact-SQL 語法慣例

語法

column_name.PathName ( @option [ , use_replica_computer_name ] )

引數

  • column_name
    這是 varbinary(max) FILESTREAM 資料行的資料行名稱。 column_name 必須是資料行名稱。 它不能是運算式或是 CAST 或 CONVERT 陳述式的結果。

    針對任何其他資料類型的資料行或是沒有 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

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

備註

必須可以在呼叫 PathName 的任何查詢中看到 ROWGUID 資料行。

只能使用 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;

請參閱

參考

GET_FILESTREAM_TRANSACTION_CONTEXT (Transact-SQL)

使用 OpenSqlFilestream 存取 FILESTREAM 資料

概念

二進位大型物件 (Blob) 資料 (SQL Server)