FileStream データ型

SQL Server 2008 からは、FileStream データ型がサポートされました。これは、Windows のファイルを直接 SQL Server へ格納できるデータ型で、SQL Server 2008 からの新機能です。このデータ型を利用することで、従来の BLOB 型(image データ型や varbinary(max) データ型)へファイル データを格納するよりも、パフォーマンスの良いアプリケーションを作成できるようになります。


FileStream データ型を利用するには、まず FileStream 機能を有効化する必要があります。これを行うには、SQL Server 構成マネージャを起動して、SQL Server サービスをダブル クリックし、[SQL Server のプロパティ]ダイアログを開きます。

[FILESTREAM]タブを開き、[Transact-SQL アクセスに対して FILESTEAM を有効にする]と[ファイル I/O ストリーム アクセスに対して FILESTREAM を有効にする]をチェックし、[OK]ボタンをクリックします。

続いて、次のように sp_configure システム ストアド プロシージャを実行して、FileStream 機能を有効化します。

EXEC sp_configure filestream_access_level, 2
RECONFIGURE


■ FileStream データ型の利用例
FileStream データ型を利用するには、次のように FileStream 用のファイル グループを作成する必要があります。

CREATE DATABASE fsTestDB
ON
PRIMARY
	 ( NAME = fsTestDB1_mdf
	, FILENAME = 'D:\fsTestDB1.mdf'),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM
	( NAME = fsTestDB_fs
	, FILENAME = 'D:\fsTestDB_FileSream')
LOG ON
	( NAME = fsTestDB_log
	, FILENAME = 'D:\fsTestDB_Log.ldf')

CONTAINS FILESTREAM を指定することで、そのファイル グループを FileStream データの格納用として利用できるようになります。

次に、FileStream データを格納するためのテーブルは、次のように作成することができます。

USE fsTestDB
CREATE TABLE photo
(
	pID	uniqueidentifier ROWGUIDCOL PRIMARY KEY, 
	pName	varchar(200),
	pData	varbinary(MAX) FILESTREAM NULL,
	updDate	datetime DEFAULT GETDATE()
)

pData 列を FileStream データ型へ設定しています。
このテーブルへデータを 2件 INSERT してみます。

INSERT INTO photo VALUES(
  NEWID(), 'test1', CAST ('test1' AS varbinary(max)), DEFAULT)
INSERT INTO photo VALUES(
  NEWID(), 'test2', CAST ('test2' AS varbinary(max)), DEFAULT)

SELECT * FROM photo


次に、PathName と GET_FILESTREAM_TRANSACTION_CONTEXT 関数を利用して、内部的なパスと、トランザクション コンテキストを取得してみます。

BEGIN TRAN
     SELECT pData.PathName()
           ,GET_FILESTREAM_TRANSACTION_CONTEXT()
      FROM photo
ROLLBACK TRAN


この 2つの結果は、アプリケーションを作成する際に必要になります。アプリケーションの作成方法については、弊社執筆の SQL Server 2008 自習書シリーズ(下記 URL)の「開発者のための Transact-SQL 応用」編を参考にしてみてください。
http://www.microsoft.com/japan/sqlserver/2008/self-learning/default.mspx

この自習書では、以下のアプリケーションを作成する手順をステップバイステップで紹介しています。