Compartilhar via


CREATE AGGREGATE (Transact-SQL)

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

ObservaçãoObservação

Por padrão, a capacidade do SQL Server em executar código CLR está desligada. Você pode criar, modificar e descartar objetos do banco de dados que façam referência a módulos de códigos gerenciados, mas o código nesses módulos não será executado em uma instância do SQL Server exceto se a opção clr enabled for habilitada com o uso de sp_configure.

Ícone de vínculo de tópicoConvenções de sintaxe 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 de parâmetro deve 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 de sistema do SQL Server para conter o valor do parâmetro de entrada ou o 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. Não podem ser especificados tipos não escalares, como cursor e table.

  • 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 assumirá 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 com o uso de uma instrução CREATE ASSEMBLY. class_name deve ser um identificador válido do SQL Server e corresponder ao nome de uma classe existente no assembly. class_name pode ser um nome qualificado por namespace se a linguagem de programação usada para gravar a classe usar namespaces, tal como C#. Se class_name não for especificado, o SQL Server assumirá que é igual ao aggregate_name.

Comentários

A classe do assembly referenciada em assembly_name e seus métodos devem satisfazer todos os requisitos para a implementação de uma função de agregação definida pelo usuário em uma instância do SQL Server. Para obter mais informações, consulte Agregações CLR 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 os Exemplos do Mecanismo de Banco de Dados do SQL Server estejam instalados no local padrão do computador local e o aplicativo de exemplo StringUtilities.csproj esteja compilado. Para obter mais informações, consulte Considerações para instalar exemplos e bancos de dados de exemplo do SQL Server.

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 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

Consulte também

Referência