Transact-SQL を使用した FILESTREAM データの管理

このトピックでは、Transact-SQL の INSERT、UPDATE、および DELETE ステートメントを使用して FILESTREAM データを管理する方法について説明します。

注意

このトピックの例を実行するには、「FILESTREAM が有効なデータベースを作成する方法」および「FILESTREAM データを格納するテーブルを作成する方法」に基づいて、FILESTREAM が有効なデータベースとテーブルを作成する必要があります。

FILESTREAM データを含む行の挿入

FILESTREAM データをサポートするテーブルに行を追加するには、Transact-SQL INSERT ステートメントを使用します。データを FILESTREAM 列に挿入するときは、NULL または varbinary(max) 値を挿入できます。

NULL の挿入

NULL を挿入する方法を次の例に示します。FILESTREAM 値が NULL の場合、ファイル システムにファイルは作成されません。

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 1, NULL);
GO

長さ 0 のレコードの挿入

INSERT を使用して長さ 0 のレコードを作成する方法を次の例に示します。これは、ファイル ハンドルを取得する必要がある場合に役立ちますが、Win32 API を使用してファイルを操作します。

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 2, 
      CAST ('' as varbinary(max)));
GO

データ ファイルの作成

INSERT を使用して、データを含むファイルを作成する方法を次の例に示します。データベース エンジンによって、文字列 Seismic Data が varbinary(max) 値に変換されます。Windows ファイルが存在しない場合は、FILESTREAM によってそのファイルが作成されます。その後にデータがデータ ファイルに追加されます。

INSERT INTO Archive.dbo.Records
    VALUES (newid (), 3, 
      CAST ('Seismic Data' as varbinary(max)));
GO

すべてのデータを Archive.dbo.Records テーブルから選択すると、次の表に示すような結果になります。ただし、Id 列に格納される GUID は異なります。

Id

SerialNumber

Resume

C871B90F-D25E-47B3-A560-7CC0CA405DAC

1

NULL

F8F5C314-0559-4927-8FA9-1535EE0BDF50

2

0x

7F680840-B7A4-45D4-8CD5-527C44D35B3F

3

0x536569736D69632044617461

FILESTREAM データの更新

Transact-SQL を使用すると、ファイル システムのファイルのデータを更新できます。ただし、大量のデータをファイルにストリーミングする必要があるときには、この操作は適していません。

ファイル レコード内の任意のテキストを、Xray 1 というテキストに置換する例を次に示します。

UPDATE Archive.dbo.Records
SET [Chart] = CAST('Xray 1' as varbinary(max))
WHERE [SerialNumber] = 2;

FILESTREAM データの削除

FILESTREAM フィールドを含む行を削除すると、その基となるファイル システム ファイルも削除されます。行、したがってファイルを削除する唯一の方法は、Transact-SQL DELETE ステートメントを使用する方法です。

行およびそれに関連付けられているファイル システム ファイルを削除する方法を次の例に示します。

DELETE Archive.dbo.Records
WHERE SerialNumber = 1;
GO

すべてのデータを dbo.Archive テーブルから選択すると、その行が削除されます。関連付けられていたファイルは使用できなくなります。

注意

基になるファイルは、FILESTREAM ガベージ コレクタによって削除されます。