Share via


Cómo: Crear y ejecutar un agregado de SQL Server mediante la integración de Common Language Runtime

Para crear agregados de SQL Server, agregue elementos Agregado a proyectos de base de datos de Common Language Runtime de SQL Server (CLR de SQL). Después de una correcta implementación, se llama a los agregados creados en código administrado y se ejecutan como cualquier otro agregado de SQL Server.

Los agregados de SQL Server requieren que se implementen cuatros métodos específicos: Init, Accumulate, Merge y Terminate. Para obtener más información, vea Requisitos para agregados definidos por el usuario de CLR en los Libros en pantalla de SQL Server, en el sitio web de Microsoft.

Nota

Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Trabajar con valores de configuración.

Crear un agregado de SQL Server

Para crear un agregado de SQL Server

  1. Abra un proyecto de base de datos CLR de SQL existente o cree uno nuevo. Para obtener más información, vea Cómo: Crear un proyecto para objetos de base de datos que usan la integración de Common Language Runtime de SQL Server.

  2. En el menú Proyecto, seleccione Agregar nuevo elemento.

  3. En el cuadro de diálogo Agregar nuevo elemento, seleccione Agregado.

  4. Escriba un Nombre para el nuevo agregado.

  5. Agregue el código que se va a ejecutar cuando se ejecuta el agregado. Vea el primer ejemplo incluido después de este procedimiento.

  6. Implemente el agregado en SQL Server. Para obtener más información, vea Cómo: Implementar elementos de proyecto de base de datos CLR de SQL en un servidor SQL Server.

    Nota importanteImportante

    SQL Server 2005 y SQL Server 2008 solo admiten proyectos de SQL Server compilados con las versiones 2.0, 3.0 ó 3.5 de .NET Framework. Si intenta implementar un proyecto de SQL Server en SQL Server 2005 o SQL Server 2008, aparece un error: 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 (donde AssemblyName es el nombre del ensamblado que se implementa). Para obtener más información, vea Cómo: Crear un proyecto para objetos de base de datos que usan la integración de Common Language Runtime de SQL Server.

  7. Depure el agregado; para ello, ejecútelo en SQL Server. Vea el segundo ejemplo incluido después de este procedimiento.

Ejemplo

Este ejemplo crea un agregado para contar la vocales Este agregado cuenta las vocales de una columna de tipos de datos de cadena. El agregado contiene los cuatro métodos necesarios siguientes, que pueden ejecutar multiproceso: Init, accumulate, merge y terminate.

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

Después de implementar el agregado, pruébelo; para ello, ejecútelo en SQL Server y compruebe que se devuelven los datos correctos. Esta consulta devuelve un conjunto de resultados del recuento vocales para todos los valores de la columna LastNames de la tabla Contact.

Nota

Si usa AdventureWorks2005, reemplace Person.Person con Person.Contact en el código Transact-SQL de ejemplo.

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

Vea también

Tareas

Cómo: Crear un proyecto para objetos de base de datos que usan la integración de Common Language Runtime de SQL Server

Cómo: Crear y ejecutar un procedimiento almacenado de SQL Server mediante la integración de Common Language Runtime

Cómo: Crear y ejecutar un desencadenador de SQL Server mediante la integración de Common Language Runtime

Cómo: Crear y ejecutar una función definida por el usuario de SQL Server mediante la integración de Common Language Runtime

Cómo: Crear y ejecutar un tipo definido por el usuario de SQL Server mediante la integración de Common Language Runtime

Tutorial: Crear un procedimiento almacenado en código administrado

Cómo: Depurar un procedimiento almacenado de SQL CLR

Referencia

Atributos para proyectos de base de datos CLR de SQL Server y objetos de base de datos

Conceptos

Introducción a la integración de CLR y SQL Server (ADO.NET)

Ventajas de utilizar código administrado para crear objetos de base de datos

Crear objetos de SQL Server en código administrado