次の方法で共有


方法 : ストアド プロシージャおよびユーザー定義関数を作成する

更新 : 2007 年 11 月

サーバー エクスプローラを使用すると、ストアド プロシージャを作成できます。ストアド プロシージャでは、複雑なビジネス ルールの定義、データ変更の制御、セキュリティ設定によるアクセス制限、およびトランザクションの整合性の提供を行えます。また、通常は、アプリケーションで必要なデータベース処理も行います。

Microsoft SQL Server 2000 以降を使用する場合は、サーバー エクスプローラでユーザー定義関数も作成できます。ユーザー定義関数は、有効なロジックをほかのクエリで使用できるようにカプセル化するルーチンです。ビューが 1 つの SELECT ステートメントに限定されているのに対して、ユーザー定義関数では複数の SELECT ステートメントを指定できるため、ビューよりも強力なロジックを作成できます。

ユーザー定義関数は、必ず値を返します。ユーザー定義関数は、返す値の種類によって、次の 3 つのカテゴリのいずれかに分類できます。

  • [スカラ値関数]   整数やタイムスタンプなどのスカラ値を返すユーザー定義関数です。スカラ値を返す関数は、列名を使用するどの箇所でもクエリに使用できます。

  • [インライン関数]   ユーザー定義関数に更新可能な SELECT ステートメントが 1 つ含まれている場合は、関数が返す表形式の結果も更新できます。このような関数をインライン関数といいます。テーブルを返すインライン関数は、ほかのクエリの FROM 句で使用できます。詳細については、「方法 : テーブル以外のアイテムを使用してクエリを作成する」を参照してください。

  • [テーブル値関数]   ユーザー定義関数に複数の SELECT ステートメントがある場合、または更新可能でない 1 つの SELECT ステートメントがある場合、関数が返す表形式の結果は更新できません。テーブルを返すテーブル値関数は、ほかのクエリの FROM 句で使用できます。

yt786c0h.alert_note(ja-jp,VS.90).gifメモ :

次の例の dbo は、データベースのオーナー (database owner) を表し、ストアド プロシージャ名およびユーザー定義関数名を修飾するために使用します。dbo は、データベースのすべてのアクティビティを実行できる暗黙的な権限を持つユーザーです。sysadmin のロールを持つメンバによって作成されるすべてのオブジェクトは、自動的に dbo に属します。次の例には、名前修飾子 dbo が指定されています。

yt786c0h.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに表示されている内容と異なる場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

新しいストアド プロシージャを作成するには

  1. サーバー エクスプローラで、[ストアド プロシージャ] フォルダまたは同フォルダ内のいずれかのストアド プロシージャを右クリックします。

  2. ショートカット メニューの [新しいストアド プロシージャの追加] をクリックします。

    次のスケルトン SQL ステートメントからなる新しいストアド プロシージャが作成されます。

    CREATE PROCEDURE dbo.StoredProcedure1
    /*
       (
          @parameter1 datatype = default value,
          @parameter2 datatype OUTPUT
       )
    */
    AS
       /* SET NOCOUNT ON */
       RETURN
    
  3. 最初の行の StoredProcedure1 を新しいプロシージャの名前に置き換えます。たとえば、MyProcedure という名前を使用します。

    CREATE PROCEDURE dbo.MyProcedure
    
    yt786c0h.alert_note(ja-jp,VS.90).gifメモ :

    ストアド プロシージャ名は一意であることが必要です。既にほかのストアド プロシージャに割り当てられている名前を選択すると、その名前のストアド プロシージャが既に存在することを警告するエラー メッセージが表示されます。

  4. 残りのプロシージャ テキストを SQL で作成します。

    ストアド プロシージャの詳細および例については、使用するデータベース サーバーのドキュメントを参照してください。Microsoft® SQL Server™ を使用する場合は、『SQL Server Books Online』の「CREATE PROCEDURE」を参照してください。

新しいユーザー定義関数を作成するには

  1. サーバー エクスプローラで、[関数] フォルダまたは同フォルダ内のいずれかの関数を右クリックします。

  2. [新規追加] をポイントし、ショートカット メニューの [インライン関数]、[テーブル値関数]、または [スカラ値関数] をクリックします。

    yt786c0h.alert_note(ja-jp,VS.90).gifメモ :

    新しい関数のスケルトン SQL ステートメントを、他の種類の SQL ステートメントに変更して結果を保存することはできません。たとえば、インライン関数の SQL ステートメントをスカラ値関数に変更することはできません。保存に失敗します。

    スケルトン SQL ステートメントからなる新しいユーザー定義関数が作成されます。たとえば、[スカラ値関数] を選択すると、次のスケルトン SQL ステートメントが作成されます。

    CREATE FUNCTION dbo.Function1
       (
       /*
       @parameter1 datatype = default value,
       @parameter2 datatype
       */
       )
    RETURNS /* datatype */
    AS
       BEGIN
          /* sql statement ... */
       RETURN /* value */
       END
    
  3. 最初の行の Function1 を新しい関数の名前に置き換えます。たとえば、MyFunction という名前を使用します。

    CREATE FUNCTION dbo.MyFunction
    
    yt786c0h.alert_note(ja-jp,VS.90).gifメモ :

    ユーザー定義関数名は、一意であることが必要です。既に他の関数に割り当てられている名前を選択すると、その名前の関数が既に存在することを警告するエラー メッセージが表示されます。

  4. 残りの関数テキストを SQL で作成します。

yt786c0h.alert_note(ja-jp,VS.90).gifメモ :

ショートカット メニューに必要なオプションが表示されない場合は、使用している Visual Studio のバージョンでこの機能がサポートされていない可能性があります。詳細については、「Microsoft Visual Database Tools と Visual Studio のエディション」を参照してください。

ユーザー定義関数の詳細および例については、使用するデータベース サーバーのドキュメントを参照してください。Microsoft® SQL Server™ を使用する場合は、『SQL Server Books Online』の「CREATE FUNCTION」を参照してください。

参照

概念

クエリでの式の使用

その他の技術情報

ストアド プロシージャおよびユーザー定義関数の使用