CREATE AGGREGATE(Transact-SQL)

 

이 항목은 다음에 적용됩니다.예SQL Server(2008부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스

구현이 .NET Framework의 어셈블리 클래스에 정의된 사용자 정의 집계 함수를 만듭니다. 데이터베이스 엔진에서 집계 함수를 해당 구현에 바인딩하려면 CREATE ASSEMBLY 문을 사용하여 먼저 해당 구현이 포함된 .NET Framework 어셈블리를 SQL Server의 인스턴스에 업로드해야 합니다.

Topic link icon 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
사용자 정의 집계에 포함된 하나 이상의 매개 변수입니다. 매개 변수의 값은 집계 함수를 실행할 때 사용자가 제공해야 합니다. "at" 기호를 사용 하 여 매개 변수 이름 지정 (@)를 첫 번째 문자로 합니다. 매개 변수 이름에 대 한 규칙을 준수 해야 식별자합니다. 매개 변수는 함수에서 로컬로 사용됩니다.

system_scalar_type
입력 매개 변수의 값 또는 반환 값을 보유하는 SQL Server 시스템 스칼라 데이터 형식 중 하나입니다. 모든 스칼라 데이터 형식을 사용할 수는 매개 변수로 사용자 정의 집계 함수에 대 한 제외 하 고 텍스트, ntext, 및 이미지합니다. 와 같은 비스칼라 형식은 커서테이블, 를 지정할 수 없습니다.

udt_schema_name
CLR 사용자 정의 형식이 속한 스키마의 이름입니다. 지정 하지 않으면는 데이터베이스 엔진 참조 udt_type_name 다음과 같은 순서로:

  • 네이티브 SQL 유형 네임스페이스

  • 현재 데이터베이스에 있는 현재 사용자의 기본 스키마

  • 현재 데이터베이스의 dbo 스키마

udt_type_name
현재 데이터베이스에 생성되어 있는 CLR 사용자 정의 형식의 이름입니다. 경우 udt_schema_name 를 지정 하지 않으면 SQL Server 는 형식이 현재 사용자의 스키마에 속하는 것으로 가정 합니다.

assembly_name [ .눈여겨 보십시오 ]
사용자 정의 집계 함수와 바인딩할 어셈블리를 지정하고 필요에 따라 어셈블리가 속한 스키마의 이름과 사용자 정의 집계를 구현하는 어셈블리의 클래스 이름을 지정합니다. 어셈블리는 CREATE ASSEMBLY 문을 사용하여 데이터베이스에 이미 생성되어 있어야 합니다. 눈여겨 보십시오 은 유효한 SQL Server 식별자와 일치 하는 어셈블리에 있는 클래스의 이름입니다. 눈여겨 보십시오 클래스를 작성 하는 데 사용 되는 프로그래밍 언어에는 C#과 같은 네임 스페이스를 사용 하는 경우에 네임 스페이스 정규화 이름을 수 있습니다. 경우 눈여겨 보십시오 를 지정 하지 않으면 SQL Server 같은 것으로 간주 aggregate_name합니다.

기본적으로 SQL Server의 CLR 코드 실행 기능은 해제됩니다. 인스턴스에서 이러한 모듈의 코드가 실행 되지 것입니다 만들기, 수정 및 관리 코드 모듈을 참조 하는 데이터베이스 개체를 삭제 하지만 SQL Server 하지 않는 한는 clr enabled 옵션 사용 하 여 sp_configure합니다.

참조 하는 어셈블리의 클래스 assembly_name 하 고 해당 메서드를 인스턴스에서 사용자 정의 집계 함수를 구현 하기 위한 모든 요구 사항을 충족 해야 SQL Server합니다. 자세한 내용은 참조 clr 사용자 정의 집계합니다.

EXTERNAL NAME 절에 지정된 어셈블리에 대한 REFERENCES 권한과 CREATE AGGREGATE 권한이 필요합니다.

다음 예에서는 StringUtilities.csproj 예제 응용 프로그램이 컴파일된다고 가정합니다. 자세한 내용은 참조 문자열 유틸리티 함수 예제합니다.

이 예에서는 집계 Concatenate를 만듭니다. 집계를 만들기 전에 StringUtilities.dll 어셈블리가 로컬 데이터베이스에 등록됩니다.

USE AdventureWorks2012;  
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\MSSQL13.MSSQLSERVER\MSSQL\DATA\master.mdf', 'Microsoft SQL Server\130\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  

집계 및 #40; 삭제 TRANSACT-SQL )

커뮤니티 추가 항목

추가
표시: