Compartilhar via


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

  1. Abra um existente Projeto do SQL servidor, ou criar um novo.Para obter mais informações, consulte Como: Criar um projeto de SQL servidor.

  2. A partir do menu Project, selecione Add New Item.

  3. Selecione Aggregate no Adicionar Novo Item Caixa de diálogo caixa.

  4. Digite o Name para a nova agregação.

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

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

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

Outros recursos

Depuração de banco de dados SQL CLR