SQL Server 2005 機能紹介

開発生産性

最終更新日: 2006 年 3 月 15 日

このページの内容は公開・更新された当時のものです。

データベースは、企業の情報戦略を支えるエンタープライズ アプリケーションの要であると同時に、それらのアプリケーションを構築する際の主要な開発のプラットフォームでもあります。今日では、アプリケーション開発において、コスト削減や短納期などに対する要求は厳しさを増しており、アプリケーション開発プラットフォームとしてのデータベースの特性、特に開発生産性は、データベース選択の重要な要素となってきています。

マイクロソフトでは、その開発プラットフォームとしてのデータベースの重要性を早くから認識し SQL Server 2005 において、品質の高いアプリケーションの迅速な開発を支える各種機能を取り入れました。さらに、SQL Server 2005 では、新機能を追加することにより、開発プラットフォームとしての完成度をいっそう高めています。

ここでは、SQL Server 2005 の開発プラットフォームとしての新機能を、開発生産性の切り口でご紹介します。

※各機能のタイトルの下に表示されているアイコンは対応するエディションを表しています。

 Mobile Edition   Express Edition   Workgroup Edition   Standard Edition   Enterprise Edition

トピック

開発レイヤーのすべてにおいて機能を強化
SQL Server 2005 と Visual Studio 2005 の統合
ADO.NET 2.0 の強化
Transact-SQL の拡張
.NET Framework のホスティング - SQL CLR -
モバイル デバイス データベース アプリケーション開発
関連サイト

開発レイヤーのすべてにおいて機能を強化

データベースと連携するアプリケーションの開発は、データベースのデザイン、設定からユーザー インターフェイスの開発まで多岐にわたるため、開発生産性を総合的に向上させることは容易ではありません。しかし、SQL Server 2005 では、データベースのデザイン、設定はもちろん、Visual Studio 2005 との高度な統合により、ストアド プロシージャを初めとするデータベース オブジェクト開発、アプリケーションからのデータ コントロール、ユーザー インターフェイスのデザイン、開発に至るまでの、すべての開発レイヤーにおいて機能強化を行い、データベース アプリケーション開発の生産性を飛躍的に向上させています。

開発生産性における SQL Server 2005 の機能

ページのトップへ

SQL Server 2005 と Visual Studio 2005 の統合

Express EditionWorkgroup EditionStandard EditionEnterprise Edition

Visual Studio 2005 との統合によって、SQL Server 2005 の優れた機能と Visual Studio のリッチな統合開発環境の下で、GUI ツールによる開発の単純化やテンプレートなどによる作業の短縮化、さらには洗練されたデバッグ作業により、開発生産性だけでなく開発品質の向上にも貢献しています。

通常、データベース オブジェクトの開発では、コードの作成後、アセンブリの配置やオブジェクトの登録、テスト スクリプトの実行やデバッグなどのすべてを、手作業で行わなければなりません。SQL Server 2005 では、Visual Studio 2005 をデータベース プロジェクトを利用して開発を行うことにより、コードを記述するだけで配置、登録やテスト実行などのすべてを自動で行います。また、サーバー エクスプローラでは、登録された SQL Server データベース サーバーから、データベース テーブルの設定確認や変更、データの追加、更新、削除までの設定作業を行うことができます。

Visual Studio 2005 によるテーブル設定

さらに、SQL Server Management Studio では データベース スクリプト をプロジェクトとして作成できるうえ、それらのソリューション ファイルを Visual SourceSafe に登録、管理することができます。

SQL Server Management Studio ソリューションエクスプローラでのソース管理

ページのトップへ

ADO.NET 2.0 の強化

Express EditionWorkgroup EditionStandard EditionEnterprise Edition

アプリケーション開発において、データ操作の基盤となる ADO.NET 2.0 では、大別して次の 3 つの点が強化されています。 1 つは SQL Server 2005 との統合、2 つ目はデータ プロバイダの強化、最後は DataSet の改善です。

SQL Server 2005 の統合では、SQLCLR、新しいデータ型のサポート、スナップショット分離レベル、MARS (Multiple Active Result Sets) に複数結果セットのサポート、SqlDependency によるクエリ通知、System.Transactions による分散トランザクションのサポートなどがあります。新しいデータ型のサポートにおいては、XML データを XML として格納できる XML 型、データ型を独自で拡張できるユーザー定義型、また varchar や nvarchar などの可変長データ型に最大データ長の MAX を設定することができます。また、従来までは、1 つのデータベース接続で 1 つのクエリのみ実行可能だったものが、複数のクエリを実行することができるようになり、より効率的なプログラミングが可能となります。

また、SQL Server 2005 では、System.Transactions クラスが新しく追加され、ADO.NET では設定が複雑であった 分散トランザクションの設定が簡単にできるようになりました。この分散トランザクションによる複数のデータベース間をまたぐトランザクションの実行は、業務システムのバッチ処理やミッション クリティカルなシステムにおいて必要とされます。分散トランザクションを利用した簡単なコード例を下に載せました。この例では、ローカル データベース サーバーの TSQLDB データベースとリモート サーバーの TSQLDB データベースの各コマンド実行でトランザクションを設定しています。このプログラムを実行すると、2 つ目のコマンド実行に当たるリモートのデータベース TSQLDB で、存在しないカラムにデータを挿入しようとするため、処理は中断されトランザクションはロールバックされるようになります。

private void button1_Click(object sender, EventArgs e)        

{

using (TransactionScope sc = new TransactionScope())        

{        

  bool flg = false;        

  try        

  {        

    SqlConnection cn = new SqlConnection("server=(local);      

⇒database=TSQLDB;trusted_connection=yes");

    SqlCommand cmd = new SqlCommand("insert into       

⇒SpeakerStats(speaker,track,score)

⇒values('misako','sys',70)", cn);

    cn.Open();        

    cmd.ExecuteNonQuery();        

    cn.Close();        

    flg = true;        

  }        

  catch        

  {        

    flg = false;        

  }        

  try        

  {        

    SqlConnection cn = new SqlConnection(@"server=rkpad\      

⇒mirror;database=TSQLDB;trusted_connection=yes");

    SqlCommand cmd = new SqlCommand("insert into       

⇒SpeakerStats(speaker,track,score,flag) values('reika',

⇒'sys',70,0)", cn);

    cn.Open();        

    cmd.ExecuteNonQuery();        

    cn.Close();        

    flg = true;        

}        

catch        

{        

    flg = false;        

}        

if (flg == false)        

{        

  label1.Text = "失敗しました。";        

  sc.Dispose();        

}        

else        

{        

  label1.Text = "成功しました。";        

  sc.Complete();        

}        

}

}

※コード中の「⇒」は画面の都合上、改行しています。

分散トランザクションだけでなく、単純なトランザクション実行でも以前まではデータベース接続ごとに設定する必要がありましたが、ADO.NET 2.0 では、透過的にトランザクションを設定しコマンドを実行することができます。

2 番目のデータプロバイダの強化では、複数のデータ変更を一度にできるバッチ更新の機能、一括インポート、非同期でのコマンド実行や、プロバイダに依存せずにデータベース プログラミングを利用できるプロバイダ ファクトリのサポートなどが可能となりました。非同期でのコマンド実行では、非同期でのデータ処理にポーリング、待機、コールバックの 3 つのパターンを使用して、プログラミングすることが可能となっています。分散されたような環境にある多くのデータベースからデータを一度に処理する際に、実行待ちとなる場合には、非同期でのコマンド実行を行うことで効率の良いアプリケーションを構築することができます。

3 番目の DataSet の強化では、主にパフォーマンスの面で改善が行われています。DataSet のアクセス改善や、Remoting バイナリ シリアライズといった、サーバー間の通信で発生していた余分なトラフィックを削減する機能がついたことで、データ通信におけるパフォーマンスが改善されています。そのほかに、従来まで DataSet だけで有効であった ReadXML や WriteXML の処理などが DataTable でもサポート、DataReader から DataSet への変換、またその逆も処理できるようになり、データ処理に関するプログラム インターフェイスがいっそう充実しました。

ページのトップへ

Transact-SQL の拡張

Express EditionWorkgroup EditionStandard EditionEnterprise Edition

アプリケーションを開発するうえで、よく実装する機能やコードパターンがあります。たとえば、データベースから抽出したデータに行番号をつけて出力したり、あるデータを基に順位をつけて出力したり、データをグループに分けて出力するといったものです。SQL Server 2005 では Transact-SQL でこれらの順位付けや行番号を設定する関数が新たに追加されました。行番号を出力する関数には、ROW_NUMBER 関数、また順位付け関数には RANK, DENSE_RANK , NTILE があります。

順位付け関数の実行

また、従来までは、Transact-SQL のレベルでは複雑な例外処理を行うことができず、エラーが発生しそうなすべてのステートメントの後にエラー処理コードを含める必要がありましたが、SQL Server 2005 からは、Try … Catch 構造の例外処理が行えるようになりました。これにより、キャッチしきれなかった例外や、業務バッチのような中断させたくない処理において、中断の可能性を避けることが難しかった問題も解決することができます。

TOP オプションも改良され、TOP で指定する結果行セット数をパーセンテージで指定することができたり、DELETE や UPDATE にも TOP オプションを適応させることができるようになりました。そのほかにも、実行結果を変数に設定することができる OUTPUT 句などがサポートされ、より柔軟なクエリを記述することができるようになりました。

ページのトップへ

.NET Framework のホスティング - SQL CLR -

Express EditionWorkgroup EditionStandard EditionEnterprise Edition

SQL Server 2000 では ADO.NET 2.0、Transact-SQL が強化され、データ アクセスに関する部分が改善され、さらに SQLCLR の新機能により、データベース プログラミングに新しい手法を提供しています。SQL Server 2005 では、OS レベルで提供されていた CLR を、アプリケーション レベルにおいても提供します。これにより、従来は Transact-SQL や C++ で記述しなければならなかったストアド プロシージャやユーザー定義関数を C# や VB.NET で開発することが可能になります。これにより、アプリケーション レベルとデータベース レベルの開発言語を統一できることはもちろん、Transact-SQL では記述が困難だった処理なども、C# や VB.NET の柔軟な言語仕様によりシンプルに記述することが可能になります。さらに、.NET Framework のクラス ライブラリの呼び出しを行うことで、データベース オブジェクト内で行うことができなかった複雑な処理の実行や、パフォーマンス向上も実現します。

また、SQL CLR により、SQL Server 2005 をアプリケーション サーバーとして利用することができるため、データ処理に関する機能をすべて .NET アセンブラとして SQL Server 2005 上に集約させることができます。これにより、従来は、技術的 (言語やアーキテクチャ的) にも、トポロジー的 (サーバー構成的) にも分散を余儀なくされたデータ処理機能が SQL Server 2005 上に統合でき、シンプルかつ柔軟なアプリケーションの構築が可能となります。

データベース オブジェクトの開発には、1. C# または VB でのコードの記述、2. 作成したコードの DLL 化、3. DLL を SQL Server に配置、4. 配置した DLL をデータベース オブジェクトとして登録、のステップを実行するだけです。作成したデータベース オブジェクトは、SQL Server Management Studio から確認、実行、管理することも可能です。

また、SQL Server 2005 と Visual Studio 2005 の統合によって、Visual Studio 2005 からデータベース オブジェクトの構築を、より簡素化されたステップで作成することができます。Visual Studio 2005 からデータベース オブジェクトを作成し、作成したいオブジェクトの機能を、C# または VB や C++ で記述することで、ビルド、配置をして完了となります。

Visual Studio 2005 によるデータベースオブジェクトの開発

さらに、SQL Server 2005 は、HTTP リスナをホストすることができるため、作成したデータベース オブジェクトを外部に Web サービスとして公開することができます。したがって Web サーバーを介することなく、SQL Server から直接 Web サービスを呼び出すことが可能となります。Web サービスを公開することによって、より柔軟なシステム開発のための API としての機能を提供することができます。

SQL Server 2005 での Web サービスの利用は、クエリでエンドポイントを作成することによって簡単に公開することができます。エンドポイントの作成は、create endpoint ステートメントを実行するだけで設定できます。また、 HTTP エンドポイントに対する認証を設定したり、ポートの設定を指定したりすることもできます。

HTTP エンドポイントの作成

ADO.NET 2.0 を利用することで、さまざまな種類の開発において、より柔軟にアプリケーションを構築することができます。さらに、Web サービスによって環境にとらわれないデータ アクセスを行えることはもちろん、Windows アプリケーション、Web アプリケーション、Office アプリケーション、モバイル デバイス アプリケーションにおいて、統一されたデータ アクセス方法による再利用性の高いプログラムを作成することができます。このことは、アプリケーションの開発生産性において重要なポイントです。

ページのトップへ

モバイル デバイス データベース アプリケーション開発

Mobile Edition EditionExpress EditionWorkgroup EditionStandard EditionEnterprise Edition

データベース アプリケーション開発では、ADO.NET 2.0 や、SQLCLR、Web サービスなどにより、さまざまな恩恵を受けています。さらに、デバイス アプリケーション開発においても、SQL Server 2005 では、強力な機能、プログラム インターフェイスを提供しています。SQL Server 2005 では、モバイル データベースに組み込むための Mobile Edition が搭載されており、Compact Framework 2.0 の SQL Server CE データ プロバイダを利用することで、簡単に モバイル データベースにアクセスすることができます。

モバイルの性質上、オフラインでのデータ アクセスが多くなり、データの同期が必要となりますが、SQL Server では、同期にマージ レプリケーションと RDA (Remote Data Access) 機能が用意されています。マージ レプリケーションでは、 SQL Server がパブリッシャ (データの発行元データベース) に 、SQL Server Mobile Edition がサブスクライバ (データの受け側データベース) となり、データの同期をとることができます。RDA では SQL Server に対する、リモートからクエリを実行できる機能を備えています。SQL Server 2005 では、マージ レプリケーションの設定をウィザードで簡単に設定することができます。設定は、SQL Server Management Studio からパブリケーションの作成と、Web 同期の構成を実行するだけで完了します。

パブリケーションの作成

アプリケーションの開発は、Visual Studio 2005 により、 Windows アプリケーションと同様の操作性で容易に構築することができます。SQL Server 2005 と Visual Studio 2005 との統合によって、Visual Studio 2005 のサーバー エクスプローラで、モバイル データベース ファイル (SDF ファイル) への接続、エミュレートが可能であり、さらにデータソース ウィンドウから、テーブルやカラムをドラッグ アンド ドロップするだけで、データ バインド コントロールが自動的に生成されるなどの操作性に富んでいます。

データソースによるデータコントロールの自動生成

また、実際のデバイスに設定する場合でも、ActiveSync を利用することで、Compact Framework からモバイル データベース、アプリケーションまで、複雑な設定なしに全て自動的に必要なコンポーネントを展開します。これによりモバイル データベース を利用したデバイス アプリケーションの開発も通常のアプリケーション開発と変わらない開発が可能となります。

ページのトップへ

関連サイト

SQL Server 2005 Webcast シリーズ

SQLCLR によるデータベースオブジェクト開発 (10 月 12 日公開)

技術情報 - TechNet

SQL Server 2005 Beta 1 DTS 実用ガイド

SQL Server 2005 のバッチのコンパイル、再コンパイル、およびプランのキャッシュに関する問題

Microsoft .NET 開発用のデータベース プラットフォームとしての SQL Server 2005 と Oracle 10g の比較
( 982 KB)

SQL Server 2005 の複数のアクティブな結果セット (MARS)

Microsoft SQL Server 2005 のクエリ オプティマイザが使用する統計情報

ページのトップへ