CREATE AGGREGATE (Transact-SQL)

.NET Framework のアセンブリのクラスで実装が定義される、ユーザー定義集計関数を作成します。データベース エンジンが集計関数を実装にバインドするには、先に CREATE ASSEMBLY ステートメントを使用して、その実装を含む .NET Framework アセンブリを SQL Server のインスタンスにアップロードしておく必要があります。

注意

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

CREATE AGGREGATE [ schema_name . ] aggregate_name(@param_name <input_sqltype> 
        [ ,...n ] )
RETURNS <return_sqltype>
EXTERNAL NAME assembly_name [ .class_name ]

<input_sqltype> ::=system_scalar_type | { [ udt_schema_name. ] udt_type_name }

<return_sqltype> ::=system_scalar_type | { [ udt_schema_name. ] udt_type_name }

引数

  • schema_name
    ユーザー定義集計関数が所属しているスキーマの名前です。

  • aggregate_name
    作成する集計関数の名前です。

  • @param_name
    ユーザー定義集計で定義された 1 つまたは複数のパラメーター。パラメーターの値は、集計関数の実行時にユーザーが指定する必要があります。パラメーター名は、最初の文字を "アット" マーク (
    @
    ) にして指定します。パラメーター名は識別子のルールに従っている必要があります。パラメーターは関数に対してローカルです。

  • system_scalar_type
    入力パラメーターの値または戻り値を保持する SQL Server システムのスカラーのデータ型です。text、ntext、image 以外のすべてのスカラーのデータ型は、ユーザー定義集計のパラメーターとして使用できます。cursor や table など、スカラー型以外のデータ型は指定できません。

  • udt_schema_name
    CLR ユーザー定義型が所属しているスキーマの名前です。指定しない場合、データベース エンジンは次の順序で udt_type_name を参照します。

    • ネイティブ SQL 型の名前空間

    • 現在のデータベースにおける現在のユーザーの既定のスキーマ

    • 現在のデータベースの dbo スキーマ

  • udt_type_name
    現在のデータベースに既に作成されている CLR ユーザー定義型の名前です。udt_schema_name を指定しない場合は、現在のユーザーのスキーマに所属する型であると見なされます。

  • assembly_name [ **.**class_name]
    ユーザー定義集計関数にバインドするアセンブリ、および必要に応じて、アセンブリが所属するスキーマの名前とユーザー定義集計を実装するアセンブリ内のクラス名を指定します。アセンブリは、CREATE ASSEMBLY ステートメントを使用してデータベース内に作成されている必要があります。class_name は有効な SQL Server 識別子でなければならず、アセンブリに存在するクラスの名前と一致する必要があります。C# など、クラスを記述するのに使用するプログラミング言語で名前空間を使用する場合、class_name には名前空間で修飾された名前を指定できます。class_name を指定しない場合は、aggregate_name と同じであると見なされます。

説明

assembly_name とそのメソッドで参照されているアセンブリのクラスは、SQL Server のインスタンスでユーザー定義集計関数を実装するためのすべての要件を満たしている必要があります。詳細については、「CLR ユーザー定義集計」を参照してください。

権限

EXTERNAL NAME 句で指定されているアセンブリ上に CREATE AGGREGATE 権限と REFERENCES 権限が必要です。

次の例では、SQL Server データベース エンジンのサンプルがローカル コンピューターの既定の位置にインストールされていて、StringUtilities.csproj サンプル アプリケーションがコンパイルされていることを前提としています。詳細については、「SQL Server のサンプルとサンプル データベースのインストールに関する注意点」を参照してください。

この例は集計 Concatenate を作成します。集計が作成される前に、アセンブリ StringUtilities.dll がローカル データベースに登録されます。

USE AdventureWorks2008R2;
GO
DECLARE @SamplesPath nvarchar(1024)
-- You may have to modify the value of the this variable if you have
--installed the sample some location other than the default location.
SELECT @SamplesPath = REPLACE(physical_name, 'Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf', 'Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\') 
     FROM master.sys.database_files 
     WHERE name = 'master';
CREATE ASSEMBLY StringUtilities FROM @SamplesPath + 'StringUtilities\CS\StringUtilities\bin\debug\StringUtilities.dll'
WITH PERMISSION_SET=SAFE;
GO

CREATE AGGREGATE Concatenate(@input nvarchar(4000))
RETURNS nvarchar(4000)
EXTERNAL NAME [StringUtilities].[Microsoft.Samples.SqlServer.Concatenate];
GO

関連項目

参照