Transact-SQL による FILESTREAM データへのアクセスAccess FILESTREAM Data with Transact-SQL

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

このトピックでは、 Transact-SQLTransact-SQL の INSERT、UPDATE、および DELETE ステートメントを使用して FILESTREAM データを管理する方法について説明します。This topic describes how to use the Transact-SQLTransact-SQL INSERT, UPDATE, and DELETE statements to manage FILESTREAM data.

注意

このトピックの例を実行するには、「 FILESTREAM が有効なデータベースを作成する方法 」および「 FILESTREAM データを格納するテーブルを作成する方法」に基づいて、FILESTREAM が有効なデータベースとテーブルを作成する必要があります。The examples in this topic require the FILESTREAM-enabled database and table that are created in Create a FILESTREAM-Enabled Database and Create a Table for Storing FILESTREAM Data.

FILESTREAM データを含む行の挿入Inserting a Row That Contains FILESTREAM Data

FILESTREAM データをサポートするテーブルに行を追加するには、 Transact-SQLTransact-SQL INSERT ステートメントを使用します。To add a row to a table that supports FILESTREAM data, use the Transact-SQLTransact-SQL INSERT statement. データを FILESTREAM 列に挿入するときは、NULL または varbinary(max) 値を挿入できます。When you insert data into a FILESTREAM column, you can insert NULL or a varbinary(max) value.

NULL の挿入Inserting NULL

NULLを挿入する方法を次の例に示します。The following example shows how to insert NULL. FILESTREAM 値が NULLの場合、 データベース エンジンDatabase Engine はファイル システムにファイルを作成しません。When the FILESTREAM value is NULL, the データベース エンジンDatabase Engine does not create a file in the file system.

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

長さ 0 のレコードの挿入Inserting a Zero-Length Record

INSERT を使用して長さ 0 のレコードを作成する方法を次の例に示します。The following example shows how to use INSERT to create a zero-length record. これは、ファイル ハンドルを取得する必要がある場合に役立ちますが、Win32 API を使用してファイルを操作します。This is useful for when you want to obtain a file handle, but will be manipulating the file by using Win32 APIs.

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

データ ファイルの作成Creating a Data File

INSERT を使用して、データを含むファイルを作成する方法を次の例に示します。The following example shows how to use INSERT to create a file that contains data. データベース エンジンDatabase Engine によって、文字列 Seismic Datavarbinary(max) 値に変換されます。The データベース エンジンDatabase Engine converts the string Seismic Data to a varbinary(max) value. Windows ファイルが存在しない場合は、FILESTREAM によってそのファイルが作成されます。その後にデータがデータ ファイルに追加されます。FILESTREAM creates the Windows file if it does not already exist.The data is then added to the data file.

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

すべてのデータを Archive.dbo.Records テーブルから選ぶと、次の表に示すような結果になります。When you select all data from the Archive.dbo.Records table, the results are similar to the results that are shown in the following table. ただし、 Id 列に格納される GUID は異なります。However, the Id column will contain different GUIDs.

IdId SerialNumberSerialNumber グラフChart
C871B90F-D25E-47B3-A560-7CC0CA405DAC 1 NULL
F8F5C314-0559-4927-8FA9-1535EE0BDF50 2 0x
7F680840-B7A4-45D4-8CD5-527C44D35B3F 3 0x536569736D69632044617461

FILESTREAM データを更新するUpdating FILESTREAM Data

Transact-SQLTransact-SQL を使用すると、ファイル システムのファイルのデータを更新できます。ただし、大量のデータをファイルにストリーミングする必要があるときには、この操作は適していません。You can use Transact-SQLTransact-SQL to update the data in the file system file; although, you might not want to do this when you have to stream large amounts of data to a file.

ファイル レコード内の任意のテキストを、 Xray 1というテキストに置換する例を次に示します。The following example replaces any text in the file record with the text Xray 1.

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

FILESTREAM データの削除Deleting FILESTREAM Data

FILESTREAM フィールドを含む行を削除すると、その基となるファイル システム ファイルも削除されます。When you delete a row that contains a FILESTREAM field, you also delete its underlying file system files. 行、したがってファイルを削除する唯一の方法は、 Transact-SQLTransact-SQL DELETE ステートメントを使用する方法です。The only way to delete a row, and therefore the file, is to use the Transact-SQLTransact-SQL DELETE statement.

行およびそれに関連付けられているファイル システム ファイルを削除する方法を次の例に示します。The following example shows how to delete a row and its associated file system files.

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

すべてのデータを Archive.dbo.Records テーブルから選ぶと、行が削除されて、関連付けられたファイルを使うことができなくなります。When you select all data from the Archive.dbo.Records table, the row is gone and you can no longer use the associated file.

注意

基になるファイルは、FILESTREAM ガベージ コレクターによって削除されます。The underlying files are removed by the FILESTREAM garbage collector.

参照See Also

FILESTREAM の有効化と構成 Enable and Configure FILESTREAM
FILESTREAM アプリケーションでのデータベース操作との競合の回避Avoid Conflicts with Database Operations in FILESTREAM Applications