SQL CLRの基本情報が分かったところで、Transact-SQLとADO.NET、SQL CLRのコード比較を行ってみましょう。サンプルとして、それぞれ1行のデータをテーブルへ追加しています。
CREATE PROCEDURE [dbo].[SampleProc] |
リスト1 Transact-SQLによるデータ挿入処理 引数に従いデータを追加するストアドプロシージャ。引数を埋め込んだINSERT文を発行している。 |
cmd.CommandText = |
リスト2 ADO.NETによるデータ挿入処理(C#) INSERT文中に埋め込んだパラメータ(@id,@name)に対し値をセットし、コマンドを発行している(データベースとの接続部などは省略)。 |
SqlCommand cmd = new SqlCommand(); |
リスト3 SQL CLRによるデータの挿入処理(C#) ADO.NETのコードとほぼ変わらない内容となっている。 |
まず、Transact-SQLのコード(リスト1)ですが、SQL発行に特化した言語体系のため、サンプルのような単純な処理であれば、非常に短いコードで済みます。このことから、既存のTransact-SQLをすべてSQL CLRに置き換えるべきではない、ということが分かります。単純なデータアクセスであれば、Transact-SQLの優位性は変わりません。
続いて、ADO.NET(リスト2)とSQL CLR(リスト3)の比較ですが、どちらもC#で書かれているため、構文などに変化はありません。変わった部分として、データベースへの接続方法が異なります。ADO.NETでは接続先のデータベースを
server=MyServer; database=AdventureWorks…… |
というような形で指定します。
一方、SQL CLRの場合、実行ユーザーがSQL CLRを実行するSQL Serverに接続しているため、この情報を受け継いで接続先情報とすることができます。このような接続を「コンテキスト接続」と呼びます。コンテキスト接続はネットワークやプロセスを超えず、インプロセスのみの接続なので、パフォーマンスの向上が見込めます。
コンテキスト接続を利用せず、従来のADO.NETのように接続先を指定し別のSQL Serverへ接続することも可能です。また別のデータソースに接続することもできます。例えば、System.Data.OracleClientプロバイダを使用すればSQL Server内部から直接Oracleサーバに接続することも可能です。
今回はSQL CLRの基本情報の紹介と、従来の手法に対する利点などの確認を行いました。SQL CLRが革新的な技術であり、今後SQL Server 2005を利用するうえで大きなインパクトとなることを感じ取れたと思います。
これまで、SQL Serverを利用したアプリケーションでパフォーマンスが求められる場合、Transact-SQLを利用する必要がありましたが、生産性の問題などから、苦労した開発者も多いはずです。SQL CLRがTransact-SQLのすべてを置き換えられるわけではありませんが、多くの問題に直面する開発者には救いの手となるはずです。
次回は、Visual Studio 2005を利用し、より具体的なSQL CLRの紹介を行います。お楽しみに!
石橋潤一
株式会社システムインテグレータ勤務。Web+DBの業務アプリをメインに開発に携わる。@IT連載記事「SQL Server 2005 CTPレビュー」執筆のほか、著書に『DBマガジン別冊 SQL Server 2005徹底活用ガイド』(翔泳社刊/共著)、『ASP.NET+SQL Server ゼロからはじめるWebアプリケーション』(ソフトバンクパブリッシング刊/共著)。
Copyright © ITmedia, Inc. All Rights Reserved.