CLR Triggers
Todos en algun momento hemos tenido que hacer algun trigger en alguna tabla, pero que pasa si este trigger requiere de mucho procesamiento, SQL no esta diseñado para hacer mucho procesamiento, entonces la opcion es crear un Trigger CLR, este aparta de que se escribe con lenguaje .NET puede optimizar el uso de recursos
Cuando se vaya a tomar la decision de hacer un Trigger T-Sql o CLR se debe pensar primero en la complejidad del mismo
Una vez que tomamos la decision de que nuestro trigger empezemos a checar la sintaxis para crear un Trigger T-Sql
CREATE TRIGGER nombre ON tabla FOR evento AS sentencia_sql
Para poder crear nuestro Trigger CLR es necesario tener una sintaxis parecida pero solo con una pequela diferencia donde se deberia especificar la sentancia sql vamos a usar EXTERNAL NAME y la direcion de nuestro metodo; con lo cual nuestra sintaxis quedarioa así:
CREATE TRIGGER nombre ON tabla FOR evento AS EXTERNAL NAME ensamblado.[namespace.clase].metodo
donde en el apartado entre corchetes puede agregarse una cantidad n de namespaces
El punto que hay que ver a continuacion es el como crear el metodo que sera el Trigger, el cual puede quedar asi
Primero, la importacion de namespaces que vamos a utilizar
Imports System
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Transactions
Despues hay que crear una clase donde poner el Trigger; hecho esto hay que declarar que el metodo que estamos a punto de hacer es un Trigger
Public Class Triggers
_
Public Shared Sub trig ()
Despues vamos a utilizar un sqlConnection el cual va a utilizar una conexion contextual
Using connection As New SqlConnection("context connection=true")
Hacemos la logica de negocios que tengamos que hacer y compilamos; el metodo debera de quedar algo asi
Una vez abierta abierta la ventana para agregar un nuevo ensamblado elegimos el nuestro y damos click en aceptar, una vez hecho esto creamos un nuevo query, con la sintaxis que mencione al principio
El punto que hay que ver a continuacion es el como crear el metodo que sera el Trigger, el cual puede quedar asi
Primero, la importacion de namespaces que vamos a utilizar
Imports System
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Transactions
Despues hay que crear una clase donde poner el Trigger; hecho esto hay que declarar que el metodo que estamos a punto de hacer es un Trigger
Public Class Triggers
Public Shared Sub trig ()
Despues vamos a utilizar un sqlConnection el cual va a utilizar una conexion contextual
Using connection As New SqlConnection("context connection=true")
Hacemos la logica de negocios que tengamos que hacer y compilamos; el metodo debera de quedar algo asi
Imports SystemYa que tenemos nuestro propio ensamblado solo es cuestion se subirlo a SQL, hay que recordar que esta es una función nueva de SQL Server 2005, es cuestion de elegir del browser la base de datos deseada, abrir la seccion de programabilidad y ahi a la seccion de ensamblados; una vez ya localizada esta seccion es cuestion de dar boton derecho con el mouse y elegir nuevo ensamblado
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Transactions
Partial Public Class Triggers_
Public Shared Sub trig()
Using connection As New SqlConnection("context connection=true")
Dim command As SqlCommand
Dim reader As SqlDataReader
Dim value As Integer
connection.Open()
command = New SqlCommand("SELECT * FROM INSERTED", connection)
reader = command.ExecuteReader()
reader.Read()
value = CType(reader(0), Integer)
reader.Close()
If value = 1 Then
Try
Dim trans As Transaction
trans = Transaction.Current
trans.Rollback()
Catch ex As SqlException
' Catch the exception.
End Try
Else
End If
connection.Close()
End Using
End Sub
End Class
Una vez abierta abierta la ventana para agregar un nuevo ensamblado elegimos el nuestro y damos click en aceptar, una vez hecho esto creamos un nuevo query, con la sintaxis que mencione al principio
CREATE TRIGGER nombre ON tabla FOR evento AS EXTERNAL NAME ensamblado.[namespace.clase].metodo
Ejecutamos y ya tenemos nuestro Trigger CLR.
Por ultimo vale la pena mencionar que aqui tambein aplican las reglas de las diferencias entre Triggers DDL y DML
Por ultimo vale la pena mencionar que aqui tambein aplican las reglas de las diferencias entre Triggers DDL y DML
No hay comentarios.:
Publicar un comentario