連載:VS 2005でいってみようDBプログラミング第9回 Let's Master ストアド・プロシージャ!(後編)山田 祥寛(http://www.wings.msn.to/)2006/10/28 |
![]() |
|
|
|
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ペインから以下のコードを入力してください。
|
|
| 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の要領で接続先のデータベースに関する情報を入力してください。
|
||||||||
| 表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プログラミング」 |
ホワイトペーパー(TechTargetジャパン)
- LocalConnection APIと動的なスタイリング (2010/2/9)
Webページ上の複数のSilverlightアプリ間でメッセージ通信をする方法とは? コントロールの見た目を動的に設定する方法とは? - ASP.NET MVC 2:モデルの検証 (2010/2/8)
ASP.NET MVC 2で導入される入力検証機能を使った実装を紹介。シンプルな属性の追加によるエレガントな実装が可能となっている - ASP.NETによる3階層Webアプリ「ITブック」構築 (2010/2/5)
ちょっとした改造で、あなたのWebアプリは劇的に使いやすく、かっこよくなる。まずは元となるWebアプリを標準的手法で構築 - .NET TIPS - .NET開発のテクニックとヒント集 - (2010/2/4)
− カスタムMVCビューエンジンを利用するには?(活用編)
− フォーム全体へのドッキングでつまみを表示するには?
− リストボックスでTextBlockの文字列を折り返すには?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |












