viernes, 13 de noviembre de 2009

Trabajando con SQL CLR

La version SQL Server 2005, integro por primera vez el .NET Framework con T-SQL. Desde esta version es posible crear funciones, procedimientos, triggers y tipos de datos desde codigo VB.NET o C#. Sin embargo esto no viene a reemplazar, al lenguaje de consulta estructurado (SQL por sus siglas), sino mas bien a complementar, con la potencia de lenguajes de codigo, con los cuales podra ser mas facil realizar iteraciones, donde hay bastante programacion y donde no hay consultas directas, podremos hacer uso de esta caracteristica.

A continuacion ejemplos y pasos a seguir para el uso de CLR.

1. Habilitar SQL CLR
sp_configure 'clr_enabled', 1
RECONFIGURE
O bien de manera visual desde SQL Server Surface Area Configuration

2. Crear un proyecto en Visual Studio de tipo Class Library.

3. Definir los nombres de espacio
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server

4. Estamos listos para crear Funciones, Procedimientos o tipos de Datos.
A continuacion un ejemplo de Funciones y Procedimientos con acceso a ADO.NET

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server


Public Class Data
_
Public Shared Function HolaSQLCLR() As Integer

Return "Informacion a Regresar. Hola Mundo"
End Function

_
Public Shared Sub GetProductos()

'Dim conn As New SqlConnection("context connection=true")
Dim conn As New SqlConnection("Data Source=.;Initial Catalog=Northwind;uid=sa;pwd=123")
conn.Open()

Dim cmd As New SqlCommand("SELECT ProductID, ProductName, QuantityPerUnit " & _
"FROM Products ORDER BY ProductName", conn)

Dim reader As SqlDataReader
reader = cmd.ExecuteReader

Dim oPipe As SqlPipe
oPipe = SqlContext.Pipe
oPipe.Send(reader)
oPipe.Send("Resultados enviados al cliente")

End Sub
End Class

5. Registrar la DLL en nuestro servidor.
CREATE ASSEMBLY MyDLL FROM 'c:\MyDll.dll'

6. Crear los procedimientos o funciones.
CREATE PROC sp_clr
AS EXTERNAL NAME MyDLL.[Clientes.Data].GetProductos


CREATE FUNCTION dbo.fxDatos()
RETURNS INT
EXTERNAL NAME MyDLL.[Clientes.Data].GetCustomers


7. Ejecutarlos tal y cual se ejecutan con T-SQL
exec sp_clr;
select dbo.fxDatos()

1 comentario:

  1. Hola buenas tardes, veo que ya tiene rato que se publicó este ejemplo. Esto que muestra en su ejemplo ya lo realizé, mi pregunta es que si dentro de esta dll se puede crear un Evento, y dicho Evento se ejecute dentro del VB.NET en mi proyecto. La idea es que dentro del Evento en mi proyecto detecte los cambios en un campo en especifico con el trigger, y este a su vez realize algún cambio dentro de mi aplicación.

    yosoy_siuluis@hotmail.com

    ResponderEliminar