次の方法で共有


方法 : CLR の SQL Server ユーザー定義関数を作成および実行する

更新 : 2007 年 11 月

SQL ユーザー定義関数を作成するには、SQL Server プロジェクトに [ユーザー定義の関数] を追加します。ユーザー定義関数を正しく配置すると、その関数を呼び出して実行できます。

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

既定では、Microsoft SQL Server では共通言語ランタイム (CLR: Common Language Runtime) 統合機能が無効になっており、SQL Server プロジェクト項目を使用するにはこの機能を有効にする必要があります。CLR 統合を有効にするには、sp_configure ストアド プロシージャの clr enabled オプションを使用します。詳細については、「CLR 統合の有効化」を参照してください。

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

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

SQL Server ユーザー定義関数の作成

Visual Studio を使用してこの関数をビルドして配置するには

  1. 既存の SQL Server プロジェクトを開くか、または新しい SQL Server プロジェクトを作成します。詳細については、「方法 : SQL Server プロジェクトを作成する」を参照してください。

  2. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  3. [新しい項目の追加] ダイアログ ボックスの [ユーザー定義の関数] を選択します。

  4. 新しいユーザー定義関数の名前を [ファイル名] に入力します。

  5. ユーザー定義関数の実行時に実行するコードを追加します。下記の最初の例を参照してください。

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

    C++ の例は、/clr:safe コンパイラ オプションを使ってコンパイルする必要があります。

  6. Visual Basic および Visual C# の場合は、ソリューション エクスプローラで TestScripts フォルダを開き、編集対象の Test.sql ファイルをダブルクリックして開きます。ユーザー定義関数を実行するコードを追加します。この手順に続く 2 番目の例を参照してください。

    Visual C++ の場合は、ソリューション エクスプローラで編集対象の debug.sql ファイルをダブルクリックして開きます。ユーザー定義関数を実行するコードを追加します。この手順に続く 2 番目の例を参照してください。

  7. SQL Server にユーザー定義関数を配置します。詳細については、「方法 : SQL Server のプロジェクト項目を SQL Server に配置する」を参照してください。

  8. F5 キーを押し、SQL Server でユーザー定義関数を実行して、デバッグします。

説明

価格をパラメータとして受け取り、消費税を追加して、価格と消費税の合計金額を返すユーザー定義のスカラ関数 addTax を作成するコード例を次に示します。

関数を作成したら、SQL Server に配置します。詳細については、「方法 : SQL Server のプロジェクト項目を SQL Server に配置する」を参照してください。

コード

Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server

Partial Public Class UserDefinedFunctions

    Public Const SALES_TAX As Double = 0.086

    <SqlFunction()> _
    Public Shared Function addTax(ByVal originalAmount As SqlDouble) As SqlDouble

        Dim taxAmount As SqlDouble = originalAmount * SALES_TAX

        Return originalAmount + taxAmount
    End Function
End Class
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    public const double SALES_TAX = .086;

    [SqlFunction()]
    public static SqlDouble addTax(SqlDouble originalAmount)
    {
        SqlDouble taxAmount = originalAmount * SALES_TAX;

        return originalAmount + taxAmount;
    }
}
#include "stdafx.h"

#using <System.dll>
#using <System.Data.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::Data;
using namespace System::Data::Sql;
using namespace System::Data::SqlTypes;
using namespace Microsoft::SqlServer::Server;

// In order to debug your Aggregate, add the following to your debug.sql file:
//
// SELECT dbo.addTax(10)
//

public ref class UserDefinedFunctions
{
public:
    static initonly double SALES_TAX = 0.086;

    [SqlFunction()]
    static SqlDouble AddTax(SqlDouble originalAmount)
    {
        SqlDouble taxAmount = originalAmount * SALES_TAX;

        return originalAmount + taxAmount;
    }
};

説明

ユーザー定義関数をテストするためのコードを、プロジェクト内の TestScripts フォルダにある Test.sql (Visual C++ の場合は debug.sql) ファイルに追加します。たとえば、この関数をテストするには、"SELECT dbo.addTax(10)" のようなクエリを使用します。戻り値 "10.86" を確認してください。

コード

SELECT dbo.addTax(10)

参照

処理手順

方法 : SQL Server プロジェクトを作成する

方法 : CLR の SQL Server ストアド プロシージャを作成および実行する

方法 : CLR の SQL Server トリガを作成および実行する

方法 : CLR の SQL Server の集計を作成および実行する

方法 : CLR の SQL Server ユーザー定義関数を作成および実行する

方法 : CLR の SQL Server ユーザー定義型を作成および実行する

チュートリアル : マネージ コードでのストアド プロシージャの作成

方法 : SQL CLR のストアド プロシージャをデバッグする

概念

SQL Server の CLR 統合の概要 (ADO.NET)

マネージ コードを使用したデータベース オブジェクトの作成の利点

SQL Server プロジェクト用の項目テンプレート

参照

SQL Server プロジェクトおよびデータベース オブジェクトの属性

その他の技術情報

SQL CLR データベースのデバッグ