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