Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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. |
Convenções da 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 do parâmetro deve estar em conformidade com as regras de 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.
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 usando 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 poderá ser um nome qualificado por 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 é 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 um aplicativo de exemplo StringUtilities.csproj é compilado. Para obter mais informações, consulte Exemplo 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 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\MSSQL11.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
Observação