方法: 共通言語ランタイム統合機能を使用して SQL Server のユーザー定義関数を作成および実行する
SQL Server 共通言語ランタイム (SQL CLR) データベース プロジェクトに [ユーザー定義関数] を追加して、SQL ユーザー定義関数を作成します。 ユーザー定義関数を正しく配置すると、その関数を呼び出して実行できます。
注意
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio の設定」を参照してください。
SQL Server ユーザー定義関数の作成
Visual Studio を使用してこの関数をビルドして配置するには
既存の SQL CLR データベース プロジェクトを開くか、または新しいプロジェクトを作成します。 詳細については、「方法: SQL Server 共通言語ランタイム統合機能を使用するデータ オブジェクトのプロジェクトを作成する」を参照してください。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、[ユーザー定義関数] をクリックします。
新しいユーザー定義関数の名前を [ファイル名] に入力します。
ユーザー定義関数の実行時に実行するコードを追加します。 下記の最初の例を参照してください。
ソリューション エクスプローラーで TestScripts フォルダーを開き、編集対象の Test.sql ファイルをダブルクリックして開きます。 ユーザー定義関数を実行するコードを追加します。 この手順に続く 2 番目の例を参照してください。
注意
既定のデバッグ スクリプトに他のスクリプトを指定することもできます。 詳細については、「方法: Test.sql スクリプトを編集して SQL Server 共通言語ランタイム統合機能を使用するオブジェクトを実行する」を参照してください。
SQL Server にユーザー定義関数を配置します。 詳細については、「方法: SQL CLR データベース プロジェクト項目を SQL Server に配置する」を参照してください。
重要
2.0、3.0、または 3.5 バージョンの .NET Framework でビルドした SQL Server プロジェクトをサポートするのは、SQL Server 2005 および SQL Server 2008 のみです。 SQL Server プロジェクトを SQL Server 2005 または SQL Server 2008 に配置しようとすると、Deploy error (SQL01268): .NET SqlClient Data Provider: Msg 6218, Level 16, State 3, Line 1 CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database というエラーが表示されます (AssemblyName は配置するアセンブリの名前です)。 詳細については、「方法: SQL Server 共通言語ランタイム統合機能を使用するデータ オブジェクトのプロジェクトを作成する」を参照してください。
F5 キーを押し、SQL Server でユーザー定義関数を実行して、デバッグします。
説明
価格をパラメーターとして受け取り、消費税を追加して、価格と消費税の合計金額を返すユーザー定義のスカラー関数 addTax を作成するコード例を次に示します。
関数を作成したら、SQL Server に配置します。 詳細については、「方法: SQL CLR データベース プロジェクト項目を 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;
}
}
説明
ユーザー定義関数をテストするためのコードを、プロジェクト内の TestScripts フォルダーにある Test.sql ファイルに追加します。 たとえば、この関数をテストするには、"SELECT dbo.addTax(10)" のようなクエリを使用します。戻り値 "10.86" を確認してください。
コード
SELECT dbo.addTax(10)
参照
処理手順
方法: SQL Server 共通言語ランタイム統合機能を使用するデータ オブジェクトのプロジェクトを作成する
方法: 共通言語ランタイム統合機能を使用して SQL Server ストアド プロシージャを作成および実行する
方法: 共通言語ランタイム統合機能を使用して SQL Server のトリガーを作成および実行する
方法: 共通言語ランタイム統合機能を使用して SQL Server の集計を作成および実行する
方法: 共通言語ランタイム統合機能を使用して SQL Server のユーザー定義型を作成および実行する
チュートリアル : マネージ コードでのストアド プロシージャの作成
方法 : SQL CLR のストアド プロシージャをデバッグする
参照
SQL CLR データベース プロジェクトおよびデータベース オブジェクトの属性
概念
SQL Server の CLR 統合の概要 (ADO.NET)
マネージ コードを使用したデータベース オブジェクトの作成の利点