連載:VS 2005でいってみようDBプログラミング

第9回 Let's Master ストアド・プロシージャ!(後編)

山田 祥寛(http://www.wings.msn.to/
2006/10/28
Page1 Page2 Page3 Page4

SQL CLR機能によるストアド・プロシージャ

 CLR(Common Language Runtime)とは、.NETアプリケーションを動作させるための共通的な実行エンジンです(詳細は第1回を参照してください)。SQL Server 2005では、データベース・エンジンがこのCLRと統合されたことで、ストアド・プロシージャやストアド・ファンクション、トリガーなどのデータベース・オブジェクトを(Transact-SQLの代わりに).NET対応言語を使って定義でき、それをSQL Server 2005上で実行できるようになりました。この機能はSQL Server 2005の「SQL CLR」と呼ばれます。

 SQL CLRの利点としては、以下のような点が挙げられます。

(1)一貫した言語でのデータベース・プログラミングが可能

 (繰り返しですが)SQL CLRを利用することで、データベース・オブジェクトをVisual Basic 2005やC#のような.NET対応言語を使って定義できるようになります。つまり、プレゼンテーション/ロジック層も、データアクセス層も、同一の言語、同一のプログラミング・モデルで開発できます。

 また、後述するように、VS 2005はSQL CLRを利用するためのテンプレートを提供しており、プレゼンテーション/ロジック層と同じ要領で開発を進められるのも重要なポイントです。デバッグや構成設定、アセンブリの配置まで、SQL CLRにかかわる一連の作業を、すべてVS 2005上で賄うことが可能です。

(2).NET Frameworkクラス・ライブラリを利用できる(開発生産性の向上)

 SQL CLRでも、.NET Frameworkが提供する膨大なクラス・ライブラリを利用することが可能です。特に正規表現や複雑な文字列操作、算術演算、ファイル/XML Webサービスなど外部リソースの操作を伴う処理など、従来のTransact-SQLでは困難(あるいは不可能)であった処理を容易に記述できるようになります。もちろん、自作したライブラリも利用できますので、コードの再利用性も向上します。

(3)パフォーマンス/セキュリティの改善

 SQL CLRで定義されたアセンブリはSQL Serverと同一のプロセス上で動作しますので、外部アプリケーションからSQLを発行する場合に比べるとはるかに高いパフォーマンスが期待できます。

 また、SQL CLRではアセンブリの単位で「アクセス許可レベル」を設定することが可能です。これを利用することで、(例えば)特定のアセンブリに対してのみファイル・アクセスを認める、あるいは、アンマネージ・コードへのアクセスを認める、というようなより柔軟なセキュリティ設定ができますので、不用意に有害なコードが実行されてしまうようなリスクを軽減できます。

[コラム]拡張ストアド・プロシージャ

 拡張ストアド・プロシージャを利用することで、ストアド・プロシージャをCなどのプログラミング言語を使って記述することが可能になります。作成されたDLLをSQL Serverが直接実行するという意味ではSQL CLRによく似ていますが、コードの内容によってはメモリ・リークなど、SQL Serverの動作自体を不安定にしたり、パフォーマンスを悪化させたりするような問題を引き起こす可能性があります。

 また、いわゆる.NET FrameworkのCAS(Code Access Security)に相当する機能はありませんので、実行に当たっては、他者に悪影響を及ぼす有害なコードが含まれていないかを、十分に検証する必要があります。

 拡張ストアド・プロシージャは、SQL Serverの将来のバージョンで削除される予定ですので、今後、新規の開発では利用するべきではありません。既存のアプリケーションで拡張ストアド・プロシージャを利用している場合にも、極力早期にSQL CLR機能に移行することをお勧めします。

■SQL CLR機能でストアド・プロシージャを定義する

 さて、SQL CLRの概要とそのメリットを理解できたところで、さっそく、VS 2005上でSQL CLRを使って、具体的にストアド・プロシージャを作成してみることにしましょう。

 ここでは、前回、Transact-SQLによって作成したストアド・プロシージャSelectProc(前回のPage3のリスト2)をSQL CLRで書き換えます。

[1]SQL CLR機能を有効化する

 CLR統合の機能は、デフォルトで無効に設定されています。SQL CLR機能を有効化するには、サーバ・エクスプローラから[MyDB.mdf]を右クリック、表示されたコンテキスト・メニューから[新しいクエリ]を選択します。クエリビルダ*1が表示されますので、SQLペインから以下のコードを入力してください。

sp_configure 'clr enabled', 1
RECONFIGURE
SQL CLR機能を有効化するコマンド(クエリビルダで実行できる)

*1 クエリビルダの画面構成、使い方については第5回を参照してください。

 メニュー・バーから(SQLの実行)ボタンを選択することで、クエリを実行できます。構文解析エラーが表示されますが、実行自体には特に問題ありませんので、そのまま[OK]ボタンをクリックして構いません。[クエリは正常に実行されました]ダイアログが表示されれば、有効化は成功しています。

[2]SQL CLR用の新規プロジェクトを作成する

 VS 2005ではSQL CLRによる開発を行うために、専用のプロジェクト・テンプレートが用意されています。メニューから[ファイル]−[新規作成]−[プロジェクト]を選択してください。


図3 [新しいプロジェクト]ダイアログ
メニューから[ファイル]−[新規作成]−[プロジェクト]を選択して開く。ここでは[プロジェクトの種類]欄から[Visual Basic]−[データベース]を、右の[テンプレート]欄からは[SQL Serverプロジェクト]を選択する。

 [新しいプロジェクト]ダイアログが起動しますので、[プロジェクトの種類]欄から[Visual Basic]−[データベース]を、右の[テンプレート]欄から[SQL Serverプロジェクト]を選択します。プロジェクト名は「CLRSample」としておきます。

 [OK]ボタンをクリックすると[データベース参照の追加]ダイアログ(図4)が表示されますので、[新しい参照の追加]ボタンをクリックします。さらに[新しいデータベース参照]ダイアログが表示されたら、[詳細設定]ボタンをクリックし、[プロパティの詳細]ダイアログを開きます。



[新しい参照の追加]ボタンをクリック



[詳細設定]ボタンをクリック


図4 [データベース参照の追加]ダイアログ

 [プロパティの詳細]ダイアログには、表1の要領で接続先のデータベースに関する情報を入力してください。

プロパティ名 設定値(例)
AttachDbFilename C:\Data\DBMagazine\App_Data\MyDB.mdf(データベース・ファイルへのパス)
Data Source .\SQLEXPRESS
User Instance True
表1 [プロパティの詳細]ダイアログの設定

 [OK]ボタンをクリックすると、SQL CLR機能のデバッグに関するダイアログが表示されますので、[はい]をクリックします。


図5 [Microsoft Visual Studio]ダイアログ


 INDEX
  Visual Studio 2005でいってみようDBプログラミング
  第9回 Let's Master ストアド・プロシージャ!(後編)
    1.ストアド・プロシージャでトランザクションを利用
  2.SQL CLR機能によるストアド・プロシージャ
    3.新規SQL CLRストアド・プロシージャの追加
    4.アクセス許可レベルを設定/アセンブリの配置
 
インデックス・ページヘ  「Visual Studio 2005でいってみようDBプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間