特集
SQL Server 2005の新機能「SQL CLR」(後編)

Visual Studio 2005でSQL CLRを実装してみる

中 博俊(Microsoft MVP 2005 - Visual C#)
2005/04/09
Page1 Page2 Page3 Page4

(3)SQL CLRプログラムの実行

 実行方法は、通常の実行ファイル(.EXEファイル)のプロジェクトを起動する場合と、まったく変わらない。ただし記事執筆時点(SQL Server 2005 Beta2 + Visual Studio 2005 Beta1の環境)では、デバッグが正常に動作しないため、デバッグなしで開始(Ctrl+F5)する必要があった。

 それではSQL CLRプログラムを実行してみよう。まずプロジェクトがビルドされて、次にアセンブリと関数がSQL Serverへ登録(配置)される。Visual Studio 2005の[出力]ウィンドウには、次のような出力が得られるはずだ。

------ ビルド開始: プロジェクト: SqlServerProject1, 構成: Debug Any CPU ------
Csc.exe /noconfig /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\sqlaccess.dll" /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.40607\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.40607\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.40607\System.XML.dll /debug+ /optimize- /out:obj\Debug\SqlServerProject1.dll /target:library AssemblyInfo.cs Function1.cs

ビルドの完了 -- エラー 0、警告 0
------ 配置開始: プロジェクト: SqlServerProject1, 構成: Debug Any CPU ------
配置ファイル: SqlServerProject1.dll、パス: C:\compile\SqlServerProject1\SqlServerProject1\obj\Debug\SqlServerProject1.dll ...
配置ファイル: SqlServerProject1.pdb、パス: C:\compile\SqlServerProject1\SqlServerProject1\obj\Debug\SqlServerProject1.pdb ...
配置ファイル: AssemblyInfo.cs、パス: C:\compile\SqlServerProject1\SqlServerProject1\AssemblyInfo.cs ...
配置ファイル: Function1.cs、パス: C:\compile\SqlServerProject1\SqlServerProject1\Function1.cs ...
配置ファイル: SqlServerProject1.csproj、パス: C:\compile\SqlServerProject1\SqlServerProject1\SqlServerProject1.csproj ...
========== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========
========== 配置: 1 正常終了、0 失敗、0 スキップ ==========
SQL CLRのプロジェクトを実行したときに得られるビルドと配置の出力内容
この出力内容を見れば、ビルドから配置までが自動的に行われているのが分かるだろう。

 前章の手順のようにsqlcmdツールを使った場合には、さまざまなコマンドを入力する必要があったが、Visual Studio 2005によるSQL CLRの開発では、Ctrl+F5を押す(=デバッグなしで開始する)だけでSQL Serverへの配置まですべてを行ってくれる。

 また前章では利用しなかったが、.pdbファイル(=デバッグ・ビルド時に生成されるファイル)やソース・ファイルまでSQL Serverへ配置されている。これはデバッグ作業のためである(前章のコマンドラインによる方法では、この手順は割愛した)。

 以上のビルドと配置が完了すると、続いてSQL CLRプログラムの実行結果が表示される。

選択されたスクリプトを assembly deployment process から実行しています。

Could not find either column 'dbo' or user defined function or aggregate 'dbo.Function1', or the name is ambiguous.
選択された assembly deployment process のスクリプトの実行が完了しました。
SQL CLRプログラムの実行結果

 実行結果として失敗を示すメッセージが出力されている。

 このようになってしまうのは、SQL CLRの実行はあくまでSQL文の実行という形で行われるが、このSQL文内にある関数名が、実際の関数名(いま作成したメソッドの名前「HelloSqlClr」)と異なっているためだ。実行されるSQL文はVisual Studio 2005のプロジェクト内に格納されているので、これを修正して正常に動作するようにしてみよう。

(4)テスト用SQLスクリプトを書き換えてテスト・シナリオを変更する

 [ソリューション エクスプローラ]のプロジェクトに生成されている「TestScripts」フォルダを開いて、その中にある「Test.sql」というファイル(=テスト用SQLスクリプト・ファイル)をダブルクリックする。すると、このファイルが開かれて、次の画面のようになる。

テスト用SQLスクリプト・ファイル「Test.sql」を開いた状態
「TestScripts」フォルダの中に、テスト用SQL文を含んだファイル「Test.sql」が格納されている。

 このように、Visual Studio 2005を使ってSQL CLRのプロジェクトを作成すれば、テスト実行用のSQL文を含んだファイルまで自動的に生成してくれるのだ。しかしこのSQL文は、初期状態ではソース・コードが自動生成された際のメソッド名が記述されているので、実際に実装を行うときにメソッド名を変更すると、どうしてもずれが生じてしまったりする(前述したように、本稿ではメソッド名を「Function1」から「HelloSqlClr」へ変更した)。

 従って、実態に合わせてその都度テスト用ファイルを変更する必要がある。つまり、次のように修正すればよい。

select dbo.HelloSqlClr()
go

(5)呼び出しテスト

 テスト・スクリプトを書き換えたら、もう一度デバッグなしで開始(Ctrl+F5)してみよう。すると今度はテスト用のSQL文が正常に実行されるはずだ。この実行が成功すると、次のように出力される。

選択されたスクリプトを assembly deployment process から実行しています。

(1 行が該当しました)
Column1
---------------
Hello SQL CLR
(1 行が返されました)
選択された assembly deployment process のスクリプトの実行が完了しました。
正常にテスト用SQL文が実行された結果
Visual Studio 2005を使えば、このようにテストも自動的に実行することができる。

 前章のようにコマンドラインから手作業で開発を行うよりも、Visual Studio 2005による開発の方が数倍生産性が高いのを、理解していただけたのではないだろうか。

4. まとめ

 前後編の2回にわたってSQL CLRについて取り上げてきたがどうだっただろうか。SQL CLR自体が新しい機能であるため「何ができるのか」といった視点で紹介してきたが、今後出てくるWinFSなども考えるとユーザー定義型などはもっと掘り下げていきたいテーマである。

 C#やVB.NETを使っている開発者にとっては、SQL CLRは非常に強力な武器となる。SQL Server 2005がリリースされればすぐに活用できるように、皆さんのプロジェクトでも、ぜひいまから積極的に評価してほしい。End of Article

 

 INDEX
  [特集]SQL Server 2005の新機能「SQL CLR」(前編)
  SQL Serverプログラミングを革新するSQL CLRとは?
     1.従来のSQLプログラミングについて
     2.SQLプログラミングを革新するSQL CLRとは?
     3.SQL CLRの特長とストアド・プロシージャとの使い分け
  [特集]SQL Server 2005の新機能「SQL CLR」(後編)
  Visual Studio 2005でSQL CLRを実装してみる
     1.SQL CLRプログラミングの種類
     2.SQL CLRでHello World!を作成してみる
     3.Visual StudioによるSQL CLRの開発
   4.SQL CLRプログラムの実行
 


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

本日 月間