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

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

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

[4]アクセス許可レベルを設定する

 本節冒頭でも述べたように、SQL CLRではアセンブリの単位に「アクセス許可レベル」を設定することが可能です。SQL CLRで用意されているアクセス許可レベルは、表3のとおりです。

アクセス許可レベル 概要
セーフ(SAFE) 演算処理やローカル・データアクセスのみを許可(最も制限されたアクセス許可)
外部(EXTERNAL_ACCESS) 「セーフ」に加えて、ファイルやネットワークなどの外部アクセスを許可
アンセーフ(UNSAFE) 「外部」に加えて、アンマネージ・コードへのアクセスを許可(セキュリティ制限を一切設けない)
表3 SQL CLRで利用可能なアクセス許可レベル

 デフォルトでは最も制限された「セーフ」が与えられており、殊更に必要なければ、これを変更するべきではありません。外部リソースへのアクセスを必要とする、あるいは、(リスクは含みますが)アンマネージ・コードとの連携を必要とするケースにのみ、それぞれ「外部」/「アンセーフ」を付与してください。

 アクセス許可レベルを変更するには、ソリューション・エクスプローラから[My Project]をダブルクリックしてください。プロパティ・シートが開きますので、[データベース]タブから[アクセス許可のレベル]を選択します。


図7 データベース・プロジェクトのプロパティ・シート
[データベース]タブから[アクセス許可のレベル]が「セーフ」になっていることを確認する。必要ない限り、本項目は変更しないこと。

[コラム]外部/アンセーフのレベルを付与する場合の条件

 SQL CLRのアクセス許可レベルを「外部」または「アンセーフ」に設定するには、アセンブリへの署名と権限の設定を行うか、あるいは、データベース・プロパティのTRUSTWORTHYをONに設定する必要があります(ただし、後者はセキュリティの観点から推奨されません)。本稿では手順は割愛しますので、詳細についてはMSDNドキュメント「アセンブリの作成」を参照してください。

[5]データベースにアセンブリを配置する

 これでSQL CLRによるストアド・プロシージャの作成/設定は完了です。出来上がったアセンブリをデータベースに配置するには、ソリューション・エクスプローラからプロジェクトを右クリックし、表示されたコンテキスト・メニューより[配置]を選択します。

 [出力]ウィンドウに図8のような画面が表示されれば、アセンブリは正しくデータベースに配置されました。


図8 アセンブリ配置時の[出力]ウィンドウの結果表示

 サーバ・エクスプローラでは、[データ接続]−[MyDB.mdf]−[ストアドプロシージャ]の配下に「SelectCLR」が追加されていることが確認できるはずです。

[6]ストアド・プロシージャの動作を確認する

 以上で、SQL CLRを利用したストアド・プロシージャの作成は完了です。正しく動作していることを、前回使用したサンプル・アプリケーションsp.aspxを使って確認してみましょう。

 ストアド・プロシージャの一連の設定は、すでに前回「ストアド・プロシージャから出力パラメータを取得する」で紹介したとおりですので、本稿では割愛します。

 前回の復習もかねて、自分でデータベース構成ウィザードからストアド・プロシージャSelectCLRを関連付けてみてください。なおデータベース構成ウィザードは、フォーム・デザイナ上、GridViewコントロールの右肩からタスク・メニューを表示し、[データソースの構成]を選択することで起動できます。


図9 データソース構成ウィザードの設定(ウィザードの途中の画面)
使用するストアド・プロシージャを選択する画面。アプリケーション側からはストアド・プロシージャがTransact-SQLかSQL CLRかを意識する必要はない。

 一見すっと通り過ぎてしまいそうですが、このとき、Transact-SQL、SQL CLRのいずれを利用して作成した場合にも、アプリケーション側からストアド・プロシージャを操作する手順は同様である点に注目してください。SQL Server 2005では、サーバ上に配置されたアセンブリをTransact-SQLオブジェクトでラップしますので、アプリケーション開発者が内部的な実装を意識する必要はありません。

 以上を理解したら、修正したsp.aspxを実行します。図10のように、現在表示されているレコードの件数が確認できれば成功です。


図10 アプリケーションの実行画面(sp.aspx)
画面の先頭に表示されているレコード件数やグリッド表示の内容はストアド・プロシージャにより取得したデータ。

 以上、今回はストアド・プロシージャ上でのトランザクションの利用、そしてSQL CLRを利用したストアド・プロシージャの実装について紹介しました。SQL CLRを利用することで、データベース・プログラミングの開発生産性をより高められることがお分かりになったことと思います。

 もっとも、最後に注意しておきたいのは、「では、今後はすべての機能をTransact-SQLからSQL CLRに移行すればよいのか」というと、これははっきりと否であるという点です。

 なるほど、Transact-SQLが標準では用意していない複雑な文字列操作/算術演算、配列/リストの利用、外部リソースへのアクセスなどの処理を必要とする場合には、SQL CLRを利用することでコードもシンプルになりますし、実行パフォーマンスも向上します。

 しかし、シンプルなSELECT命令や標準的な集計関数で賄えるような基本的な処理ならば、SQL CLRを利用するよりもTransact-SQLを利用した方がシンプルに記述できますし、処理も高速です(そうした意味では、本稿で紹介したサンプルもSQL CLRの構文サンプルとして便宜的に挙げているものの、実際にはTransact-SQLで記述する方が好ましいといえます)。

 ストアド・プロシージャの構築に際しては、その内容に応じていずれがより適しているのかを十分に検討し、適材適所で両者を使い分けるようにしてください。SQL CLRは唯一の選択肢ではありません。End of Article


 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 記事ランキング

本日 月間