次の方法で共有


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.IOSystem.WebServicesSystem.Sqlなど、.NET Framework のさまざまなクラスを使用できます。 このような関数を含むアセンブリは、少なくともこの目的のために EXTERNAL_ACCESS 権限セットを使用して構成する必要があります。 詳細については、「CREATE ASSEMBLY」を参照してください。

SQL Server のリモート インスタンスへのアクセスには、SQL クライアント マネージド プロバイダーを使用できます。 ただし、接続を開始したサーバーへのループバック接続は、CLR 関数ではサポートされていません。

SQL Server でアセンブリを作成、変更、または削除する

CLR 関数を作成する

ネイティブ コードにアクセスする

CLR 関数では、マネージド コードから PInvokeを使用することにより、C や C++ で記述されたコードなどのネイティブ (アンマネージド) コードにアクセスできます (詳細については、「マネージド コードからのネイティブ関数の呼び出し」を参照してください)。 従来のコードを CLR UDF として再利用したり、ネイティブ コードでパフォーマンスが重要な UDF を記述したりすることができ、UNSAFE アセンブリを使用する必要があります。 CLR 統合の Code Access Security を参照して、UNSAFE アセンブリの使用に関する注意事項をご確認ください。