分享方式:


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 語句的結果。

針對任何其他數據類型的數據行或 沒有 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
位值,定義應該如何在 Always On 可用性群組中傳回伺服器名稱。

當資料庫不屬於 Always On 可用性群組時,會忽略此自變數的值。 計算機名稱一律用於路徑中。

當資料庫屬於 Always On 可用性群組時,use_replica_computer_name的值就會對 PathName 函式的輸出產生下列影響:

Description
未指定。 函式會傳回路徑中的虛擬網路名稱 (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;  

另請參閱

二進位大型物件 (Blob) 資料 (SQL Server)
GET_FILESTREAM_TRANSACTION_CONTEXT (Transact-SQL)
使用 OpenSqlFilestream 存取 FILESTREAM 資料