Eventos

[.NET] Integrando objetos de .NET en SQL


La integración CLR es una característica que nos permite ejecutar código manejado en SQL Server. El código manejado es más adecuado que Transact-SQL para los cálculos y la lógica de ejecución complicada y presenta una amplia compatibilidad para muchas tareas complejas, como son el tratamiento de cadenas, fechas, expresiones regulares, etc.

Primer paso

En un nuevo proyecto del tipo Class Library (o librería de clases) definimos una clase con un par de métodos estáticos:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IntegrandoCLR
{
    public class SpecialMath
    {
        public static void Procesar(int a, int b, out int c)
        {
            if (a > b)
                c = a + b;
            else
                c = a * a;
        }

        public static double Calcular(double a, double b)
        {
            return Math.Log(a, b);
        }
    }
}

Segundo paso

Una vez construida la librería y ubicada en algún lugar del disco, hacemos lo siguiente en SQL Server:

--Habilitamos la carácterística a nivel de servidor.
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO

--Registro el ensamblado con algún nombre (este ensamblado queda disponible para todas las bases de datos en el servidor)
CREATE ASSEMBLY MiSuperEnsamblado
FROM 'D:\IntegrandoCLR.dll'
GO

--Creo el procedimiento almacenado asociándolo con el método estático en la clase
CREATE PROCEDURE ProcesarConSpecialMath_SP
@Num1 INT,
@Num2 INT,
@Num3 INT OUTPUT
AS EXTERNAL NAME MiSuperEnsamblado.[IntegrandoCLR.SpecialMath].Procesar
GO

--Creo la función asociándola con la función estática en la clase
CREATE FUNCTION ClacularConSpecialMath_FN(@Num1 FLOAT, @Num2 FLOAT)
RETURNS FLOAT
AS EXTERNAL NAME MiSuperEnsamblado.[IntegrandoCLR.SpecialMath].Calcular
GO

Fin

Ya hecho todo esto podemos probarlo de la siguiente manera:

DECLARE @Result INT
EXEC ProcesarConSpecialMath_SP 77,9, @Result OUT
PRINT @Result
GO

SELECT dbo.ClacularConSpecialMath_FN(3,9)
GO

No hay comentarios.:

Publicar un comentario

Epicalsoft — Superheroic Software Development Blog Designed by Templateism.com Copyright © 2014

Con tecnología de Blogger.