次の方法で共有


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 関数の出力に次の影響を与えます。

説明
指定されていません。 この関数は、パス内の仮想ネットワーク名 (VNN) を返します。
0 この関数は、パス内の仮想ネットワーク名 (VNN) を返します。
1 関数は、パス内のコンピューター名を返します。

返り値の種類

nvarchar(max)

戻り値

返される値は、BLOB の完全修飾論理パスまたは NETBIOS パスです。 PathName は IP アドレスを返しません。 FILESTREAM BLOB が作成されていない場合は、NULL が返されます。

解説

ROWGUID 列は、PathName を呼び出すクエリに表示される必要があります。

FILESTREAM BLOB は、Transact-SQL を使用してのみ作成できます。

A. FILESTREAM BLOB のパスを読み取る

次の例では、PathNamenvarchar(max) 変数に代入します。

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

B. テーブル内の FILESTREAM BLOB のパスの表示

次の例では、3 つの 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) データ (SQLServer)
GET_FILESTREAM_TRANSACTION_CONTEXT (Transact-SQL)
OpenSqlFilestream による FILESTREAM データへのアクセス