次の方法で共有


CLR 関数の作成

SQL Server のインスタンス内部には、Microsoft .NET Framework CLR (共通言語ランタイム) で作成されたアセンブリでプログラミングされたデータベース オブジェクトを作成できます。 共通言語ランタイムが提供する豊富なプログラミング モデルを利用できるデータベース オブジェクトには、集計関数、関数、ストアド プロシージャ、トリガー、型などがあります。

SQL Server の CLR 関数を作成するには、次の手順に従います。

  • .NET Frameworkがサポートする言語のクラスの静的メソッドとして、関数を定義します。 共通言語ランタイムでの関数のプログラミング方法の詳細については、「 CLR ユーザー定義関数」を参照してください。 次に、適切な言語コンパイラを使用してクラスをコンパイルし、 .NET Framework のアセンブリをビルドします。

  • CREATE ASSEMBLY ステートメントを使用して、 SQL Server にアセンブリを登録します。 SQL Serverのアセンブリの詳細については、「アセンブリ (データベース エンジン)」を参照してください。

  • CREATE FUNCTION ステートメントを使用して、登録したアセンブリを参照する関数を作成します。

Note

MicrosoftVisual Studio で SQL Server プロジェクトを配置すると、そのプロジェクトで指定されたデータベースにアセンブリが登録されます。 また、プロジェクトを配置することで、SqlFunction 属性で注釈が付けられたすべてのメソッドの CLR 関数がデータベースに作成されます。 詳細については、「 CLR データベース オブジェクトの配置」を参照してください。

Note

CLR コードを実行する SQL Server の機能は、既定では無効になっています。 マネージド コード モジュールを参照するデータベース オブジェクトを作成、変更、削除することはできますが、 SQL Server sp_configure (Transact-SQL) を使用して clr enabled オプション を有効にしないと、これらの参照はで実行されません。

外部リソースへのアクセス

CLR 関数は、ファイル、ネットワーク リソース、Web サービス、他のデータベース ( SQL Serverのリモート インスタンスを含む) などの外部リソースへのアクセスに使用できます。 これは、 .NET Framework、 System.IOSystem.WebServicesなど、 System.Sqlのさまざまなクラスを使用して実現できます。 このためには、このような関数を含むアセンブリに、少なくとも EXTERNAL_ACCESS 権限セットを構成します。 詳細については、「 CREATE ASSEMBLY (Transact-SQL)」を参照してください。 SQL Serverのリモート インスタンスへのアクセスには、SQL クライアント マネージド プロバイダーを使用できます。 ただし、接続を開始したサーバーへのループバック接続は、CLR 関数ではサポートされていません。

SQL Server のアセンブリを作成、変更、削除するには

CLR 関数を作成するには

ネイティブ コードへのアクセス

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

参照

ユーザー定義関数の作成 (データベース エンジン)
ユーザー定義集計の作成
ユーザー定義関数の実行
ユーザー定義関数の表示
CLR (共通言語ランタイム) 統合のプログラミング概念