次の方法で共有


Transact-SQL を使用して FILESTREAM データにアクセスする

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

このトピックの例では、「FILESTREAM-Enabled データベースの作成」および「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

Zero-Length レコードの挿入

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

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

データ ファイルの作成

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

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

Archiveからすべてのデータを選択する場合。 dbo.Records 結果は、次の表に示す結果と似ています。 ただし、 Id 列には異なる GUID が含まれます。

ID (アイディー) シリアルナンバー レジュメ
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 ガベージ コレクターによって削除されます。

こちらもご覧ください

FILESTREAM の有効化と構成
FILESTREAM アプリケーションでのデータベース操作との競合を回避する