次の方法で共有


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

適用対象:SQL Server

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

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

集計メソッド

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

Init メソッド

構文:

public void 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は、ユーザー定義型にすることもできます。