En español se llaman o están traducidos por desencadenador son lo mismo que los Stored Procedures pero éstos se ejecutan desantendidamente y automáticamente cuando un usuario realiza una acción con la tabla de una base de datos que lleve asociado este trigger. Se pueden crear triggers para las sentencias de SQL Insert, Update y Delete.
Por ejemplo en la anterior tabla pr_usuararios podemos crear un trigger que cada vez que se inserte un nuevo registro envie un mail de aviso al webmaster del web (este ejemplo esta puesto al final de esta página).
La estructura de un trigger es:
Create Trigger pr_usuarios_Trigger1
On dbo.pr_usuarios
For /* Insert, Update, Delete */
As
Los triggers pueden incluir cualquier número y clase de instrucción de Transact-SQL.
Los podemos crear desde el Entreprise Manager del SQL como muestran las figuras 1 y 2 o desde el Visual Interdev creando un proyecto de base de datos como muestra en la figura 3 y 4.
Desde el Trigger podremos obtener los datos de la fila que se ha modificado o añadido utilizando inserted o deleted:
Select * from deleted
Limitaciones de los triggers.
- Solo se pueden aplicar a una tabla especifica, es decir, un trigger no sirve para dos o más tablas
- El trigger se crea en la base de datos que de trabajo pero desde un trigger puedes hacer referencia a otras bases de datos.
- Un Trigger devuelve resultados al programa que lo desencadena de la misma forma que un Stored Procedure aunque no es lo mas idoneo, para impedir que una instrucción de asignación devuelva un resultado se puede utilizar la sentencia SET NOCOUNT al principio del Trigger.
- Las siguientes instrucciones no se pueden utilizar en los triggers :
ALTER DATABASE CREATE DATABASE
DISK INIT DISK RESIZE
DROP DATABASE LOAD DATABASE
LOAD LOG RECONFIGURE
RESTORE DATABASE RESTORE LOG
Francisco Alejandro Rios Favela
la siguiente pagina fue diseñada mas que nada para entregar los trabajos del profesor Victor Yaurima ya que en pocas palabras este sera como un portafolio virtual en esta materia quiero salir como un alumno sobresaliente a si que le echare todas las ganas para lograrlo.
martes, 23 de noviembre de 2010
PROCEDIMIENTOS ALMACENADOS
Una característica de muchos gestores de bases de datos como Sql Server, es que permiten guardar las consultas para poder ejecutarlas desde nuestro código. Asi conseguimos abstraer nuestra lógica de datos de nuestra lógica de negocio. En Sql Server estas consultas se llaman procedimientos de almacenado. Un ejemplo de esto es
La principales ventajes de los procedimientos de almacenado son
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE dbo.sp_test-- Add the parameters for the stored procedure here@IdFoo int ASBEGIN SELECT
FROMFoo WHEREIdFoo = @IdFoo END GOEste procedimiento recibe como parametro el entero @IdFoo, y busca en la tabla Foo, un registro que tenga el campo IdFoo igual al parametro de entrada @IdFoo. Para llamar este procedimiento de almacenado desde nuestro código tan sólo debemos hacer lo siguiente
public void ExecuteStoreProcedure(int idFoo) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand()) { connection.Open(); command.Connection = connection; command.CommandType = System.Data.CommandType.StoredProcedure; command.CommandText = "sp_test"; command.CommandTimeout = 10; command.Parameters.AddWithValue("@IdFoo", idFoo); SqlDataReader reader = command.ExecuteReader(); } } }Como vemos es muy fácil, creamos una conexión, y un comando. A este comando le decimos que ejecutará el procedimiento sp_test y le pasamos el parametro idFoo como @IdFoo. El resultado de la consulta se guarda en un SqlDataReader. Ahora podremos recorrer este SqlDataReader para devolver algún dato o pasar la información a un objeto de negocio.
La principales ventajes de los procedimientos de almacenado son
- Evita en parte los molestos ataques por inyección sql (sql injection).
- La velocidad de la consulta es mayor.
- Toda la logica de acceso a datos se encuentra en la base de datos.
miércoles, 13 de octubre de 2010
miércoles, 1 de septiembre de 2010
domingo, 29 de agosto de 2010
Suscribirse a:
Entradas (Atom)