ユーザー定義集計として登録するクラスでは、次のインスタンス メソッドをサポートする必要があります。次に、集計を計算するためにクエリ プロセッサで使用されるメソッドを示します。
|
メソッド
|
構文
|
説明
|
|---|
|
Init
|
|
クエリ プロセッサは、このメソッドを使用して集計計算を初期化します。このメソッドは、クエリ プロセッサで集計されるグループごとに 1 回ずつ呼び出されます。クエリ プロセッサでは、複数のグループの集計を計算するために、集計クラスの同じインスタンスの再利用を選択することがあります。Init メソッドは、現在のインスタンスが以前に使用されていれば必要になるクリーンアップを実行し、新たな集計計算を再開できるようにします。
|
|
Accumulate
|
public void Accumulate ( input-type value[, input-type value, ...]);
|
関数のパラメータを表す 1 つ以上のパラメータ。input_type には、CREATE AGGREGATE ステートメントで input_sqltype により指定された SQL Server ネイティブ データ型に相当する SQL Server マネージ データ型を指定する必要があります。詳細については、「CLR パラメータ データのマッピング」を参照してください。
UDT (ユーザー定義型) の場合、input-type 型は UDT 型と同じです。クエリ プロセッサでは、このメソッドを使用して集計値を積算します。このメソッドは、集計されるグループの値ごとに 1 回ずつ呼び出されます。クエリ プロセッサでは、集計クラスの特定のインスタンスの Init メソッドが呼び出された後にのみ、常に、このメソッドが呼び出されます。このメソッドの実装では、渡された引数値の積算を反映してインスタンスの状態を更新する必要があります。
|
|
Merge
|
public void Merge( udagg_class value);
|
このメソッドは、この集計クラスの別のインスタンスを現在のインスタンスとマージする場合に使用できます。クエリ プロセッサでは、このメソッドを使用して、1 つの集計の複数の部分計算をマージできます。
|
|
Terminate
|
public return_type Terminate();
|
このメソッドは、集計計算を完了し、集計の結果を返します。return_type には、CREATE AGGREGATE ステートメントで指定された return_sqltype のマネージ データ型に相当する SQL Server マネージ データ型を指定する必要があります。また、return_type には、ユーザー定義型を指定することもできます。
|
テーブル値パラメータ
テーブル値パラメータ (TVP) とは、プロシージャや関数に渡されるユーザー定義のテーブル型です。TVP を使用すると、複数行のデータを効率的にサーバーに渡すことができます。TVP の機能はパラメータ配列に似ていますが、より柔軟性が高く、Transact-SQL との統合も緊密です。TVP を使用するとパフォーマンスが向上する可能性もあります。また、サーバーへのラウンド トリップを減らすのにも役立ちます。スカラ パラメータのリストを使用するなどしてサーバーに複数の要求を送信する代わりに、データを TVP としてサーバーに送信できます。SQL Server のプロセスで実行されているマネージ ストアド プロシージャやマネージ関数にユーザー定義のテーブル型をテーブル値パラメータとして渡したり、戻り値として受け取ったりすることはできません。また、TVP はコンテキスト接続のスコープ内では使用できません。ただし、コンテキスト接続ではない接続で使用されている SqlClient を使用すると、SQL Server のプロセスで実行されているマネージ ストアド プロシージャやマネージ関数で TVP を使用できます。その接続は、マネージ プロシージャやマネージ関数を実行しているのと同じサーバーへの接続でかまいません。TVP の詳細については、「テーブル値パラメータ (データベース エンジン)」を参照してください。