Compartilhar via


CREATE AGGREGATE (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Cria uma função de agregação definida pelo usuário, cuja implementação está definida em uma classe de um assembly no .NET Framework. Para que o Mecanismo de Banco de Dados vincule a função agregada à sua implementação, o assembly do .NET Framework que contém a implementação deve primeiro ser carregado em uma instância do SQL Server usando uma instrução CREATE ASSEMBLY.

Convenções de sintaxe de Transact-SQL

Sintaxe

  
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 }  
  

Argumentos

schema_name
É o nome do esquema ao qual pertence a função de agregação definida pelo usuário.

aggregate_name
É o nome da função de agregação que você deseja criar.

@ param_name
Um ou mais parâmetros na agregação definida pelo usuário. O valor de um parâmetro deve ser fornecido pelo usuário quando a função de agregação é executada. Especifique um nome de parâmetro usando um sinal de "arroba" ( @ ) como o primeiro caractere. O nome do parâmetro precisa estar em conformidade com as regras para identificadores. Os parâmetros são locais à função.

system_scalar_type
É qualquer um dos tipos de dados escalares do sistema SQL Server para manter o valor do parâmetro de entrada ou valor de retorno. Todos os tipos de dados escalares podem ser usados como um parâmetro para uma agregação definida pelo usuário, exceto text, ntext e image. Os tipos não escalares, como cursor e tabela, não podem ser especificado.

udt_schema_name
É o nome do esquema ao qual pertence o tipo de dado CLR definido pelo usuário. Se não for especificado, o Mecanismo de Banco de Dados fará referência a udt_type_name na seguinte ordem:

  • O namespace do tipo SQL nativo.

  • O esquema padrão do usuário atual no banco de dados atual.

  • O esquema dbo no banco de dados atual.

udt_type_name
É o nome de um tipo de dado CLR definido pelo usuário já criado no banco de dados atual. Se udt_schema_name não for especificado, o SQL Server considerará que o tipo pertence ao esquema do usuário atual.

assembly_name [ .class_name ]
Especifica o assembly a ser associado à função de agregação definida pelo usuário e, opcionalmente, o nome do esquema ao qual pertence o assembly e o nome da classe no assembly que implementa a agregação definida pelo usuário. O assembly já deve ter sido criado no banco de dados usando uma instrução CREATE ASSEMBLY. class_name precisa ser um identificador válido do SQL Server e corresponder ao nome de uma classe que exista no assembly. class_name poderá ser um nome qualificado de namespace se a linguagem de programação usada para escrever a classe usar namespaces, como C#. Se class_name não for especificado, o SQL Server assumirá que ele é o mesmo que aggregate_name.

Comentários

Por padrão, a capacidade do SQL Server em executar código CLR está desligada. Você pode criar, modificar e descartar objetos de banco de dados que referenciam módulos de código gerenciado, mas o código nesses módulos não será executado em uma instância do SQL Server a menos que a opção de clr habilitado esteja habilitada usando sp_configure.

A classe do assembly referenciado em assembly_name e seus métodos devem atender a todos os requisitos para implementar uma função de agregação definida pelo usuário em uma instância do SQL Server. Para obter mais informações, confira Agregações do CLR (Common Language Runtime) definidas pelo usuário .

Permissões

Requer permissão CREATE AGGREGATE e também permissão REFERENCES no assembly que é especificado na cláusula EXTERNAL NAME.

Exemplos

O exemplo a seguir supõe que um aplicativo de exemplo StringUtilities.csproj é compilado. Para obter mais informações, confira Exemplo de funções de utilitário de cadeia de caracteres.

O exemplo cria a agregação Concatenate. Antes que a agregação seja criada, o assembly StringUtilities.dll é registrado no banco de dados local.

USE AdventureWorks2022;  
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  

Consulte Também

DROP AGGREGATE (Transact-SQL)