viernes, 1 de abril de 2011

Usando Integración CLR en SQL Server 2005

Usando Integración CLR en SQL Server 2005.


1.    Escribamos un programa “Hello World”

using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;

public class HelloWorldProc
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void HelloWorld()
    {
        SqlContext.Pipe.Send("Hello world!\n");
    }
}

 2.    Compilemos el procedimiento almacenado "Hello World"

 


3.    Abra SQL Server Management Studio y elija crear un nuevo "query", y habilite Integración CLR como se muestra en la imagen debajo.


Luego, cree el ensamblado en SQL Server.





Los permisos que puede configurar son:

  • SAFE: Solamente código que corre dentro de del proceso de SQL puede ser ejcutado.
  • EXTERNAL_ACCESS: Cuando el ensamblado necesita acceso a archivos, redes, variables ambientales y el registry.
  • UNSAFE: Cuando el ensamblado necesita acceso a el subsistema Win32, o acceso no restringido a recursos, tanto dentro como fuera de una instancia de SQL Server.


Para verificar la existencia del ensamblado, consulte la tabla de sys.assemblies.




Ahora usted puede acceder al método HelloWorld haciendo uso de la instrucción T-SQL CREATE PROCEDURE.




Ejecute el procedimiento almacenado (stored procedure) como ejecutaría cualquier otro procedimiento almacenado.


Si le gustaría eliminar el procedimiento almacenado y el ensamblado, proceda a efectuar lo siguiente:


  

Referencias.


2 comentarios:

  1. El ejemplo esta muy bueno, pero tengo una consulta, que pasa cuando es necesario enviar un parametro al procedimiento o a la funcion clr?

    ResponderEliminar
  2. Amigo, buenas estoy trabajando con CLR, en sql server 2008, podia hacer uso del INSERT INTO #tblTemporal EXEC CLR_PROCEDIMIENTO (La gracia es que va a buscar la información a otro server)
    pero tuve que bajar por motivos de ambientes en producción a SQL Server 2005 y me da el siguiente error, por favor me puedes ayudar, gracias.

    error:

    La transacción de contexto que estaba activa antes de especificar una rutina, un desencadenador o un agregado "PROCEDIMIENTO CLR" definido por el usuario ha terminado dentro de éstos, lo cual no está permitido. Cambie la lógica de la aplicación para exigir un nivel de anidamiento estricto de la transacción.

    ResponderEliminar