連載
» 2006年06月13日 00時00分 公開

SQL CLRコーディング、最初の一歩SQL Server 2005を使いこなそう(5)(3/3 ページ)

[石橋潤一,株式会社システムインテグレータ]
前のページへ 1|2|3       

SQL CLRのデバッグ

 SQL CLRのデバッグに当たっては、通常のコードと変わらないインターフェイスが提供されています。ブレイクポイントによる実行の中断やステップ実行、変数の監視などを行うことができます(図5)。

図5 SQL CLRのデバッグ画面 図5 SQL CLRのデバッグ画面(画像をクリックすると拡大します)

 図5ではブレイクポイントから1行進んだ所で止まっています。ステップ実行や変数の監視を利用することにより、プログラムの実行状況を随時把握できます。

SQL CLRによるユーザー定義関数の作成

 ストアドプロシージャに続いて、ユーザー定義関数を作成してみましょう。ユーザー定義関数は、パラメータを受け取り、計算や各種操作を実行し、その結果を返すためのプログラムです。SQL CLRでは1つの値を返すスカラ値関数(SVF)と行セットを返すテーブル値関数(TVF)を扱うことができます。ここではサンプルとして、スカラ値関数を作成します。

 まず、先ほどまで利用したプロジェクトに対し、ユーザー定義関数のファイルを追加します。「プロジェクト」メニュー内の「ユーザー定義関数の追加」を選択してファイルの追加を行います。

 続いて、コーディングを行います。コードとしては、渡された日付文字列に対し、曜日を返す、という単純なものです(リスト5)。

using System;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public class SampleUDF
{
  [Microsoft.SqlServer.Server.SqlFunction]
  public static SqlString GetWeek(string myDay)
  {
    DateTime MyDateTime = DateTime.Parse(myDay);
    return new SqlString(MyDateTime.ToString("dddd"));
  }
};
リスト5 ユーザー定義関数の作成

 リスト5では戻り値としてSqlString型を指定していますが、これはSystem.Data.SqlTypes名前空間で定義されたSQL Serverプログラミング向けのネイティブなデータ型(以下SQL Server CLRデータ型)です。SqlString型は.NETでのデータ型(以下CLRデータ型)としてString型に対応しています。

 データベースへ格納する、またはデータベースからデータを取得する際のデータ型はパフォーマンスと安全性の観点から、SQL Server CLRデータ型でのプログラム作成が推奨されています。SQL Server CLRデータ型とCLRデータ型の対応については、MSDN2のドキュメント「SQL Serverデータ型と.NET Frameworkデータ型の対応」にて確認できます。

 コーディング後、ビルドと配置を行い、Test.sqlより実行テストを行います。ユーザー定義関数は、SELECT文より呼び出すことが可能なので、リスト6のように記述します。

SELECT dbo.GetWeek('2006/06/04') AS DayOfWeek
リスト6 Test.sqlの書き換え

 実行結果はストアドプロシージャと同じく「出力」ウィンドウに表示されます(リスト7)。

DayOfWeek
-----------
日曜日
リスト7 ユーザー定義関数の実行結果

 以上のように、ユーザー定義関数も簡単に作成できます。ユーザー定義関数はSELECT文などから直接呼び出せるため、クエリとの親和性が非常に高く、SQL CLRでの実行結果をクエリ内で利用したい場合に大きな助けとなるでしょう。

まとめ

 ここまで、ストアドプロシージャとユーザー定義関数について簡単なサンプル作成を行いました。Visual Studio 2005を利用することによりSQL CLRの作成からSQL Serverへの配置、デバッグまで必要な作業をすべて行うことができます。その生産性は非常に高く、言語としてもC#やVB.NETを知っていれば新たに言語を覚える必要はありません。また、Visual Studioを利用することによってプロジェクトごとのコードの管理や履歴管理なども一元化されるため、プロジェクトの運用管理という面でも利点は大きいでしょう。

 しかしながら、今回のサンプルに示したような単純なデータ処理であれば、Transact-SQLの優位性は揺らぎません。データを取り扱うための専用言語であるTransact-SQLの方が、より単純にパフォーマンスの高いコードを記述できます。開発者には、それぞれ利点欠点を見極めた使い分けが求められます。


 次回は、テーブル値関数の解説に加えて、SQL CLRを利用する動機ともいえる正規表現やほかのデータベース製品との接続などの確認を行う予定です。お楽しみに!

著者紹介

石橋潤一

株式会社システムインテグレータ勤務。Web+DBの業務アプリをメインに開発に携わる。@IT連載記事「SQL Server 2005 CTPレビュー」執筆のほか、著書に『DBマガジン別冊 SQL Server 2005徹底活用ガイド』(翔泳社刊/共著)、『ASP.NET+SQL Server ゼロからはじめるWebアプリケーション』(ソフトバンクパブリッシング刊/共著)。



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。