Como: Criar e executar uma agregação de servidor SQL CLR
Criar agregações no SQL adicionando itens Aggregate para projetos do SQL Server.Após a implantação bem-sucedida, os agregados criados no código gerenciado são chamados e executados como qualquer outra função agregada do SQL Server.
Observação: |
---|
O recurso de integração common linguagem tempo de execução (CLR) fica desativado por padrão em mensagens do Microsoft SQL ER e deve ser ativado para usar itens de projeto do SQL servidor.Para ativar integração CLR, use o CLR enabled opção de do sp_configure procedimento armazenado.Para obter mais informações, consulte Habilitar integração CLR. |
Observação: |
---|
SQL Agregações de servidor requerem quatro métodos específicos ser implementados; Init, Accumulate, mesclagem e terminar.Para obter mais informações, consulte o tópico funções agregadas do SQL definidas pelo usuário .NET CLR em Livros Online do SQL. |
Observação: |
---|
As caixas de diálogo e o menu Comandos yo consulte u pode diferir das descritas no Help dependendo de suas configurações ativas ou edição.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio. |
Criando uma agregação no SQL Server
Para criar uma agregação no SQL Server
Abra um existente Projeto do SQL servidor, ou criar um novo.Para obter mais informações, consulte Como: Criar um projeto de SQL servidor.
A partir do menu Project, selecione Add New Item.
Selecione Aggregate no Adicionar Novo Item Caixa de diálogo caixa.
Digite o Name para a nova agregação.
Adicione o código para executar quando a agregação é executada.Consulte o primeiro exemplo abaixo.
Observação: |
---|
Exemplos de C++ devem ser compilados com o / CLR : segurança opção do compilador. |
Implante uma agregação a um servidor SQL.Para obter mais informações, consulte Como: Implantar o SQL servidor projeto Items em um SQL servidor.
Depure uma agregação, executando-a no SQL Server.Consulte o segundo exemplo abaixo.
Exemplo
Este exemplo cria uma agregação para contar vogais.Esta agregação conta as vogais em uma coluna de tipos em uma sequência de tipos de dados.A agregação contém os seguintes métodos de necessários quatro, que podem ser executado com vários segmentos: Init, Accumulate, mesclagem e terminar.
Imports System
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
<Serializable()> _
<SqlUserDefinedAggregate(Format.Native)> _
Public Structure CountVowels
' count only the vowels in the passed-in strings
Private countOfVowels As SqlInt32
Public Sub Init()
countOfVowels = 0
End Sub
Public Sub Accumulate(ByVal value As SqlString)
Dim stringChar As String
Dim indexChar As Int32
' for each character in the given parameter
For indexChar = 0 To Len(value.ToString()) - 1
stringChar = value.ToString().Substring(indexChar, 1)
If stringChar.ToLower() Like "[aeiou]" Then
' it is a vowel, increment the count
countOfVowels = countOfVowels + 1
End If
Next
End Sub
Public Sub Merge(ByVal value As CountVowels)
Accumulate(value.Terminate())
End Sub
Public Function Terminate() As SqlString
Return countOfVowels.ToString()
End Function
End Structure
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
[Serializable]
[SqlUserDefinedAggregate(Format.Native)]
public struct CountVowels
{
// count only the vowels in the passed-in strings
private SqlInt32 countOfVowels;
public void Init()
{
countOfVowels = 0;
}
public void Accumulate(SqlString value)
{
// list of vowels to look for
string vowels = "aeiou";
// for each character in the given parameter
for (int i=0; i < value.ToString().Length; i++)
{
// for each character in the vowels string
for (int j=0; j < vowels.Length; j++)
{
// convert parameter character to lowercase and compare to vowel
if (value.Value.Substring(i,1).ToLower() == vowels.Substring(j,1))
{
// it is a vowel, increment the count
countOfVowels+=1;
}
}
}
}
public void Merge(CountVowels value)
{
Accumulate(value.Terminate());
}
public SqlString Terminate()
{
return countOfVowels.ToString();
}
}
#include "stdafx.h"
#using <System.dll>
#using <System.Data.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::Data;
using namespace System::Data::Sql;
using namespace System::Data::SqlTypes;
using namespace Microsoft::SqlServer::Server;
// In order to debug your Aggregate, add the following to your debug.sql file:
//
// SELECT LastName, COUNT(LastName) AS CountOfLastName, dbo.CountVowels(LastName) AS CountOfVowels
// FROM Person.Contact
// GROUP BY LastName
// ORDER BY LastName
//
[Serializable]
[SqlUserDefinedAggregate(Format::Native)]
public value struct CountVowels
{
public:
void Init()
{
countOfVowels = 0;
}
void Accumulate(SqlString value)
{
// list of vowels to look for
String ^vowels = "aeiou";
// for each character in the given parameter
for (int i=0; i < value.ToString()->Length; i++)
{
// for each character in the vowels string
for (int j=0; j < vowels->Length; j++)
{
// convert parameter character to lowercase and compare to vowel
if (value.Value->Substring(i, 1)->ToLower() == vowels->Substring(j, 1))
{
// it is a vowel, increment the count
countOfVowels+=1;
break;
}
}
}
}
void Merge(CountVowels value)
{
Accumulate(value.Terminate());
}
SqlTypes::SqlString Terminate()
{
return countOfVowels.ToString();
}
private:
// count only the vowels in the passed-in strings
SqlInt32 countOfVowels;
};
Após implantar a agregação, testá-la, executando-a no SQL Server e verifique se os dados corretos são retornados.Esta consulta retorna um conjunto de resultados da contagem de vogais para todos os valores na coluna LastNames na tabela contato.
SELECT LastName, COUNT(LastName) AS CountOfLastName, dbo.CountVowels(LastName) AS CountOfVowels
FROM Person.Contact
GROUP BY LastName
ORDER BY LastName
Consulte também
Tarefas
Como: Criar um projeto de SQL servidor
Como: Criar e executar um CLR SQL servidor Stored procedimento
Como: Criar e executar um disparar CLR SQL servidor
Como: Criar e executar uma agregação de servidor SQL CLR
Como: Criar and Run a CLR SQL servidor função definida pelo usuário
Como: Criar and Run a CLR SQL servidor tipo definido pelo usuário
Demonstra Passo a passo: Criando um procedimento armazenado em código gerenciado
Como: Depurar um SQL CLR Procedimento Armazenado
Conceitos
Introduction to Integration CLR SQL Servidor
Vantagens de usar código gerenciado para criar objetos de bancos de dados
Modelos de Item para Projetos do SQL Server
Referência
Atributos para projetos SQL Server e objetos de bancos de dados