CREATE AGGREGATE (Transact-SQL)
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 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çã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. |
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 String Utilities Sample.
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 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\MSSQL10.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