Microsoft .NET Framework 共通言語ランタイム (CLR) で作成されたアセンブリでプログラミングされた SQL Server のインスタンス内にデータベース オブジェクトを作成できます。 共通言語ランタイムによって提供される豊富なプログラミング モデルを利用できるデータベース オブジェクトには、集計関数、関数、ストアド プロシージャ、トリガー、および型が含まれます。
SQL Server で CLR 関数を作成するには、次の手順を実行します。
.NET Framework でサポートされている言語のクラスの静的メソッドとして関数を定義します。 共通言語ランタイムで関数をプログラムする方法の詳細については、「 CLR User-Defined Functions」を参照してください。 次に、クラスをコンパイルし、適切な言語コンパイラを使用して .NET Framework でアセンブリをビルドします。
CREATE ASSEMBLY ステートメントを使用して、アセンブリを SQL Server に登録します。 SQL Server のアセンブリの詳細については、「アセンブリ (データベース エンジン)」を参照してください。
CREATE FUNCTION ステートメントを使用して、登録済みアセンブリを参照する関数を作成します。
注
MicrosoftVisual Studio で SQL Server プロジェクトを展開すると、プロジェクトに指定されたデータベースにアセンブリが登録されます。 プロジェクトを配置すると、 SqlFunction
属性で注釈が付けられたすべてのメソッドの CLR 関数もデータベースに作成されます。 詳細については、「 CLR データベース オブジェクトの配置」を参照してください。
注
SQL Server で CLR コードを実行する機能は、既定ではオフになっています。 マネージド コード モジュールを参照するデータベース オブジェクトを作成、変更、および削除できますが、 clr enabled Option が sp_configure (Transact-SQL) を使用して有効になっていない限り、これらの参照は SQL Server では実行されません。
外部リソースへのアクセス
CLR 関数を使用して、ファイル、ネットワーク リソース、Web サービス、その他のデータベース (SQL Server のリモート インスタンスを含む) などの外部リソースにアクセスできます。 これを実現するには、 System.IO
、 System.WebServices
、 System.Sql
など、.NET Framework のさまざまなクラスを使用します。 このような関数を含むアセンブリは、少なくともこの目的のためにEXTERNAL_ACCESS権限セットを使用して構成する必要があります。 詳細については、「 CREATE ASSEMBLY (Transact-SQL)」を参照してください。 SQL クライアント マネージド プロバイダーを使用して、SQL Server のリモート インスタンスにアクセスできます。 ただし、CLR 関数では、元のサーバーへのループバック接続はサポートされていません。
SQL Server でアセンブリを作成、変更、または削除するには
CLR 関数を作成するには
ネイティブ コードへのアクセス
CLR 関数を使用すると、マネージド コードから PInvoke を使用して、C または C++ で記述されたコードなどのネイティブ (アンマネージド) コードにアクセスできます (詳細については、 マネージド コードからのネイティブ関数の呼び出し を参照してください)。 これにより、従来のコードを CLR UDF として再利用したり、ネイティブ コードでパフォーマンスクリティカルな UDF を記述したりできます。 これには UNSAFE アセンブリを使用する必要があります。 UNSAFE アセンブリの使用に関する注意事項については、 CLR 統合コード アクセス セキュリティ に関する説明を参照してください。
こちらもご覧ください
ユーザー定義関数の作成 (データベース エンジン)
ユーザー定義集計の作成
ユーザー定義関数の実行
ユーザー定義関数の表示
共通言語ランタイム (CLR) 統合プログラミングの概念