Partilhar via


Como: Criar e executar um agregado de SQL Server usando a integração do Common Language Runtime

Criar SQL Server agregados adicionando agregada projetos de banco de dados de itens a serem SQL Server Common Language Runtime (CLR SQL). Após a implantação bem-sucedida, agregações são criadas em código gerenciado são chamadas e executadas como qualquer outro SQL Server agregado.

SQL Serveragregações requerem quatro métodos específicos a serem implementados; Init, Accumulate, Merge e encerrar. Para obter mais informações, consulte requisitos para agregados de CLR User-Defined no SQL Server Books Online no site da Microsoft.

ObservaçãoObservação

As caixas de diálogo e comandos de menu que você vê podem diferir das descritas no Help, dependendo de suas configurações ativas ou de edição. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. Para obter mais informações, consulte Trabalhando com configurações.

Criando uma agregação no SQL Server

Para criar uma agregação no SQL Server

  1. Abra um existente Projeto de banco de dados do CLR SQL, ou criar um novo. Para obter mais informações, consulte Como: Criar um projeto para os objetos de banco de dados que usam a integração de tempo de execução de linguagem comum SQL Server.

  2. No menu Project, selecione Add New Item.

  3. No Add New Item caixa de diálogo, selecione agregada.

  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 que segue este procedimento.

  6. Implante uma agregação para uma SQL Server. Para obter mais informações, consulte Como: Implantar itens de projeto de banco de dados do CLR de SQL um SQL Server.

    Observação importanteImportante

    SQL Server 2005e SQL Server 2008 oferece suporte somente a os projetos deSQL Server que foram criados com o 2.0, 3.0 ou versão 3.5 do.NET Framework. Se você tentar implantar um SQL Server projeto SQL Server 2005 ou SQL Server 2008, um erro será exibida: Deploy error (SQL01268): .NET SqlClient Data Provider: Msg 6218, Level 16, State 3, Line 1 CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database(onde AssemblyName é o nome do assembly que você estiver implantando). Para obter mais informações, consulte Como: Criar um projeto para os objetos de banco de dados que usam a integração de tempo de execução de linguagem comum SQL Server.

  7. Depure uma agregação, executando-a na SQL Server. Consulte o segundo exemplo que segue este procedimento.

Exemplo

Este exemplo cria uma agregação para contar vogais. Esta agregação conta as vogais em uma coluna de tipos de dados de seqüência de caracteres. A agregação contém os quatro métodos necessários, que podem ser executado multithread: Init, Accumulate, Merge e encerrar.

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();
    }
}

Após implantar a agregação, testá-lo executando-o sobre o SQL Server e verificar os dados corretos é retornado. Esta consulta retorna um conjunto de resultados da contagem de vogais para todos os valores na coluna LastNames na tabela contato.

ObservaçãoObservação

Se você estiver usando AdventureWorks2005, substitua Person.Person Person.Contact na amostra Transact-SQL código.

SELECT LastName, COUNT(LastName) AS CountOfLastName, dbo.CountVowels(LastName) AS CountOfVowels
FROM Person.Person
GROUP BY LastName
ORDER BY LastName

Consulte também

Tarefas

Como: Criar um projeto para os objetos de banco de dados que usam a integração de tempo de execução de linguagem comum SQL Server

Como: Criar e executar um procedimento armazenado do SQL Server usando a integração do Common Language Runtime

Como: Criar e executar um disparador de SQL Server usando a integração do Common Language Runtime

Como: Criar e executar uma função de SQL Server User-Defined usando a integração do Common Language Runtime

Como: Criar e executar um tipo de SQL Server User-Defined usando a integração do Common Language Runtime

Demonstra Passo a passo: Criar um procedimento armazenado no código gerenciado

Como: Depurar um CLR SQL procedimento armazenado

Referência

Atributos para objetos de banco de dados e de projetos de banco de dados do CLR de SQL

Conceitos

Introduction to SQL Server CLR Integration (ADO.NET)

Vantagens de usar código gerenciado para criar objetos de bancos de dados

Criar objetos de SQL Server no código gerenciado