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 ガベージ コレクタによって削除されます。 |