SQL Server 言語拡張で .NET ランタイムを呼び出す方法
適用対象: SQL Server 2019 (15.x) 以降のバージョン
SQL Server 言語拡張機能は、.NET ランタイムを呼び出すインターフェイスとして sp_execute_external_script システム ストアド プロシージャを使用します。
このハウツー記事では、SQL Server 上で実行される C# コードの実装について詳しく説明します。
C# クラスの配置場所
SQL Server で C# コードを呼び出す場合は、外部ライブラリ DDL を使用して、コンパイルされた .NET ライブラリ (DLL) やその他の依存関係をデータベースにアップロードします。 詳細については、「C# プロジェクトから .NET DLL を作成する」を参照してください。
基本原則
SQL Server で C# を実行する場合の基本的な原則を次に示します。
コンパイルされたカスタム .NET クラスは、DLL ファイルに存在する必要があります。
呼び出している C# メソッドは、ストアド プロシージャの
script
パラメーターで指定する必要があります。クラスがパッケージに属している場合は、
packageName
を提供する必要があります。params
は、C# クラスにパラメーターを渡すために使用されます。 引数を必要とするメソッドの呼び出しはサポートされていません。 そのため、引数の値をメソッドに渡すには、パラメーターが唯一の方法です。
Note
このメモでは、SQL Server 2019 (15.x) 以降のバージョンの C# に固有のサポートされている操作とサポートされていない操作について改めて説明します。 ストアド プロシージャでは、入力パラメーターがサポートされていますが、出力パラメーターはサポートされていません。
C# コードの呼び出し
sp_execute_external_script システム ストアド プロシージャは、.NET ランタイムの呼び出しに使用されるインターフェイスです。 .NET 拡張を使用する sp_execute_external_script
と、パス、スクリプト、およびカスタム コードを指定するパラメーターの例を次に示します。
Note
どのメソッドを呼び出すかを定義する必要はありません。 デフォルトでは、Execute
というメソッドが呼び出されます。 これは、SQL Server 用の Microsoft Extensibility SDK for C# に従い、C# クラスに Execute
メソッドを実装する必要があることを意味します。
DECLARE @param1 INT;
SET @param1 = 3;
EXEC sp_execute_external_script
@language = N'dotnet',
@script = N'<PackageName>.<ClassName>',
@input_data_1 = N'<Input Query>',
@param1 = @param1;
外部ライブラリを使用する
SQL Server 2019 (15.x) 以降のバージョンでは、Windows 上の C# 言語の外部ライブラリを使用できます。 CREATE EXTERNAL LIBRARY DDL を使用して、クラスを DLL ファイルにコンパイルし、DLL とその他の依存関係をデータベースにアップロードできます。
外部ライブラリを使用して DLL ファイルをアップロードする方法の例:
CREATE EXTERNAL LIBRARY [dotnetlibrary]
FROM (CONTENT = '<local path to .dll file>')
WITH (LANGUAGE = 'dotnet');
GO
外部ライブラリを作成すると、SQL Server は自動的に C# クラスにアクセスできるようになり、パスに特別なアクセス許可を設定する必要はありません。
次のコードは、外部ライブラリとしてアップロードされた MyPackage
パッケージから MyClass
クラス内の Execute
メソッドを呼び出す例です。
EXEC sp_execute_external_script
@language = N'dotnet',
@script = N'MyPackage.MyClass',
@input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));
詳細については、「CREATE EXTERNAL LIBRARY」を参照してください。