CREATE AGGREGATE (Transact-SQL)
実装が Microsoft .NET Framework のアセンブリのクラスで定義されるユーザー定義集計関数を作成します。SQL Server 2005 データベース エンジンが集計関数を実装にバインドするには、先に CREATE ASSEMBLY ステートメントを使用して、その実装を含む .NET Framework アセンブリを SQL Server のインスタンスにアップロードしておく必要があります。
メモ : |
---|
既定では、SQL Server の CLR コード実行機能は無効になっています。マネージ コード モジュールを参照するデータベース オブジェクトを作成、変更、および削除できますが、これらのモジュールのコードは、sp_configure を使用して clr enabled オプションを有効にしない限り SQL Server のインスタンスでは動作しません。 |
構文
CREATE AGGREGATE [ schema_name . ] aggregate_name
(@param_name <input_sqltype> )
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
ユーザー定義集計内のパラメータです。パラメータの値は、集計関数の実行時にユーザーが指定する必要があります。最初の文字をアット マーク (@) にしてパラメータ名を指定します。パラメータ名は識別子のルールに従っている必要があります。パラメータは関数に対してローカルです。
- system_scalar_type
入力パラメータの値または戻り値を保持する SQL Server システムのスカラのデータ型です。text、ntext、image 以外のすべてのスカラのデータ型は、ユーザー定義集計のパラメータとして使用できます。カーソルやテーブルなど、スカラ型以外のデータ型は指定できません。
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 サンプル アプリケーションがコンパイルされていることを前提としています。詳細については、「StringUtilities サンプル」を参照してください。
この例は集計 Concatenate
を作成します。集計が作成される前に、アセンブリ StringUtilities.dll
がローカル データベースに登録されます。
USE AdventureWorks;
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\MSSQL.1\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