CLR ユーザー定義集計 - 要件

適用対象:SQL Server

CLR (共通言語ランタイム) アセンブリの型は、必要な集計コントラクトが実装されていれば、ユーザー定義集計関数として登録できます。 このコントラクトは、 SqlUserDefinedAggregate 属性と集計コントラクト メソッドで構成されます。 集計コントラクトには、集計の中間状態を保存するメカニズムと、 InitAccumulateMergeTerminate の 4 つのメソッドで構成される新しい値を蓄積するメカニズムが含まれています。 これらの要件を満たすと、Microsoft SQL Serverのユーザー定義集計を最大限に活用できるようになります。 このトピックの次のセクションでは、ユーザー定義集計を作成し、そのユーザー定義集計を使用して作業する方法について詳しく説明します。 例については、「 CLR User-Defined集計関数の呼び出し」を参照してください。

SqlUserDefinedAggregate

詳細については、「 SqlUserDefinedAggregateAttribute」を参照してください。

集計のメソッド

ユーザー定義集計として登録するクラスでは、次のインスタンス メソッドをサポートする必要があります。 次に、集計を計算するためにクエリ プロセッサで使用されるメソッドを示します。

メソッド 構文 説明
Init public void Init(); クエリ プロセッサは、このメソッドを使用して集計計算を初期化します。 このメソッドは、クエリ プロセッサで集計されるグループごとに 1 回ずつ呼び出されます。 クエリ プロセッサでは、複数のグループの集計を計算するために、集計クラスの同じインスタンスの再利用を選択することがあります。 Init メソッドは、このインスタンスの以前の使用から必要に応じて任意のクリーンを実行し、新しい集計計算を再開できるようにする必要があります。
蓄積 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 メソッドを呼び出した後にのみ、これを呼び出します。 このメソッドの実装では、渡された引数値の積算を反映してインスタンスの状態を更新する必要があります。
[マージ] public void Merge( udagg_class value); このメソッドは、この集計クラスの別のインスタンスを現在のインスタンスとマージする場合に使用できます。 クエリ プロセッサでは、このメソッドを使用して、1 つの集計の複数の部分計算をマージできます。
Terminate public return_type Terminate(); このメソッドは、集計計算を完了し、集計の結果を返します。 return_typeは、CREATE AGGREGATE ステートメントで指定return_sqltypeに相当するマネージド SQL Server データ型である必要があります。 return_typeには、ユーザー定義型を指定することもできます。

参照

CLR ユーザー定義型
CLR ユーザー定義集計関数の呼び出し