informacion sobre triggers

ripquik
29 de Diciembre del 2004
bueno, una vez casi superada la asignaturas de los procedimientos almacenados,
me dispongo a estudiar la creacion de triggers, para ello necesito una breve explicaci贸n sobre los mismo.

y de paso, pregundo el equivalente de new y old en sql server.
old y new, es utilizado en los trigger de interbase. gracias

gabrielsr2004
29 de Diciembre del 2004

Para lo de Old existe la tabla deleted
para lo de new existe la tabla inserted

y lo demas espero te funcione



Desde la Ayuda de Sql


CREATE TRIGGER (T-SQL)
Crea un desencadenador, que es una clase especial de procedimiento almacenado que se ejecuta autom谩ticamente cuando un usuario intenta la instrucci贸n especificada de modificaci贸n de datos en la tabla indicada. Microsoft庐 SQL Server聶 permite la creaci贸n de varios desencadenadores para cualquier instrucci贸n INSERT, UPDATE o DELETE dada.

Sintaxis
CREATE TRIGGER nombreDesencadenador
ON tabla
[WITH ENCRYPTION]
{
{FOR { [DELETE] [,] [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
instrucci贸nSQL [...n]

}
|
{FOR { [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
{ IF UPDATE (columna)
[{AND | OR} UPDATE (columna)]
[...n]
| IF (COLUMNS_UPDATED() {operadorNivelBit} m谩scaraBitsActualizada)
{ operadorComparaci贸n} m谩scaraBitsColumna [...n]
}
instrucci贸nSQL [...n]

}
}

Argumentos
nombreDesencadenador
Es el nombre del desencadenador. Un nombre de desencadenador debe cumplir las reglas de los identificadores y debe ser 煤nico en la base de datos. Especificar el nombre del propietario del desencadenador es opcional.
tabla
Es la tabla en que se ejecuta el desencadenador; algunas veces se llama la tabla del desencadenador. Especificar el nombre del propietario de la tabla es opcional. No se pueden especificar vistas.
WITH ENCRYPTION
Codifica las entradas syscomments que contienen el texto de CREATE TRIGGER.
{ [DELETE] [,] [INSERT] [,] [UPDATE] } | { [INSERT] [,] [UPDATE]}
Son palabras clave que especifican qu茅 instrucciones de modificaci贸n de datos activan el desencadenador cuando se intentan contra esta tabla. Se debe especificar al menos una opci贸n. En la definici贸n del desencadenador se permite cualquier combinaci贸n de 茅stas. Si especifica m谩s de una opci贸n, sep谩relas con comas.
WITH APPEND
Especifica que debe agregarse un desencadenador adicional de un tipo existente. El uso de esta cl谩usula opcional s贸lo es necesario cuando el nivel de compatibilidad sea menor o igual que 65. Si el nivel de compatibilidad es mayor o igual que 70, la cl谩usula opcional WITH APPEND no es necesaria para agregar un desencadenador adicional de un tipo existente (茅ste es el comportamiento predeterminado de CREATE TRIGGER con el valor de nivel de compatibilidad mayor o igual que 70). Para obtener m谩s informaci贸n, consulte sp_dbcmptlevel.
NOT FOR REPLICATION
Indica que el desencadenador no debe ejecutarse cuando un proceso de duplicaci贸n modifica la tabla involucrada en el mismo.
AS
Son las acciones que va a llevar a cabo el desencadenador.
instrucci贸nSQL
Son las condiciones y acciones del desencadenador. Las condiciones del desencadenador especifican los criterios adicionales que determinan si los intentos de las instrucciones DELETE, INSERT o UPDATE hacen que se lleven a cabo las acciones del desencadenador.
Las acciones del desencadenador especificadas en las instrucciones Transact-SQL entran en efecto cuando se intenta la acci贸n del usuario (DELETE, INSERT o UPDATE).

Los desencadenadores pueden incluir cualquier n煤mero y clase de instrucciones Transact-SQL excepto SELECT. Un desencadenador est谩 dise帽ado para comprobar o cambiar los datos en base a una instrucci贸n de modificaci贸n de datos; no debe devolver datos al usuario. Las instrucciones Transact-SQL de un desencadenador incluyen a menudo lenguaje de control de flujo. En las instrucciones CREATE TRIGGER se utilizan unas cuantas tablas especiales:

deleted e inserted son tablas l贸gicas (conceptuales). Son de estructura similar a la tabla en que se define el desencadenador (es decir, la tabla en que se intenta la acci贸n del usuario) y mantiene los valores antiguos o nuevos de las filas que la acci贸n del usuario puede cambiar. Por ejemplo, para recuperar todos los valores de la tabla deleted, utilice:
SELECT *

FROM deleted


En un desencadenador DELETE, INSERT o UPDATE, SQL Server no admite referencias de columnas text, ntext o image en las tablas inserted y deleted si el nivel de compatibilidad es igual a 70. No se puede tener acceso a los valores text, ntext e image de las tablas inserted y deleted. Para recuperar el nuevo valor de un desencadenador INSERT o UPDATE, combine la tabla inserted con la tabla de actualizaci贸n original. Cuando el nivel de compatibilidad es 65 o inferior, se devuelven valores Null para las columnas inserted o deleted text, ntext o image que admiten valores Null; si las columnas no permiten valores Null, se devuelven cadenas de longitud cero.
n
Se trata de un marcador de posici贸n que indica que se pueden incluir varias instrucciones Transact-SQL en el desencadenador. Para la instrucci贸n IF UPDATE (columna), se pueden incluir varias columnas al repetir la cl谩usula UPDATE (columna).
IF UPDATE (columna)
Prueba una acci贸n INSERT o UPDATE en una columna especificada y no se utiliza con operaciones DELETE. Se puede especificar m谩s de una columna. Como el nombre de la tabla se especifica en la cl谩usula ON, no lo incluya antes del nombre de la columna en una cl谩usula IF UPDATE. Para probar una acci贸n INSERT o UPDATE para m谩s de una columna, especifique una cl谩usula UPDATE(columna) separada a continuaci贸n de la primera.
--------------------------------------------------------------------------------

Nota La cl谩usula IF UPDATE (columna) funciona de forma id茅ntica a una instrucci贸n IF, IF聟ELSE o WHILE, y puede utilizar el bloque BEGIN聟END. Para obtener m谩s informaci贸n, consulte Lenguaje de control de flujo.


--------------------------------------------------------------------------------

UPDATE(columna) puede utilizarse en cualquier parte dentro del cuerpo del desencadenador.

columna
Es el nombre de la columna que se va a probar para una acci贸n INSERT o UPDATE. Esta columna puede ser de cualquier tipo de datos admitido por SQL Server. Para obtener m谩s informaci贸n, consulte Tipos de datos.
IF (COLUMNS_UPDATED())
Prueba, s贸lo en un desencadenador INSERT o UPDATE, si la columna o columnas mencionadas se insertan o se actualizan. COLUMNS_UPDATED devuelve un patr贸n de bits varbinary que indica qu茅 columnas de la tabla se insertaron o se actualizaron.
COLUMNS_UPDATED puede utilizarse en cualquier parte dentro del cuerpo del desencadenador.

operadorNivelBit
Es el operador de bits que se utilizar谩 en las comparaciones.
m谩scaraBitsActualizada
Es la m谩scara de bits de enteros de las columnas realmente actualizadas o insertadas. Por ejemplo, la tabla t1 contiene las columnas C1, C2, C3, C4 y C5. Para comprobar si las columnas C2, C3 y C4 se han actualizado (con un desencadenador UPDATE en la tabla t1), especifique un valor de 14. Para comprobar si s贸lo se ha actualizado la columna C2, especifique un valor de 2.
operadorComparaci贸n
Es el operador de comparaci贸n. Utilice el signo igual (=) para comprobar si todas las columnas especificadas en m谩scaraBitsActualizada se han actualizado. Utilice el s铆mbolo mayor que (>) para comprobar si alguna de las columnas especificadas en m谩scaraBitsActualizada se han actualizado.
m谩scaraBitsColumna
Es la m谩scara de bits de enteros de las columnas que hay que comprobar para ver si se han actualizado o insertado.
Observaciones
A menudo se utilizan desencadenadores para exigir las reglas del negocio y la integridad de los datos. SQL Server proporciona integridad referencial declarativa (DRI, Declarative Referential Integrity) a trav茅s de las instrucciones de creaci贸n de tabla (ALTER TABLE y CREATE TABLE); sin embargo, DRI no proporciona integridad referencial entre bases de datos. Para exigir la integridad referencial (reglas acerca de la relaci贸n entre la clave principal y la clave externa de las tablas), utilice las restricciones de clave principal y externa (las palabras clave PRIMARY KEY y FOREIGN KEY de ALTER TABLE y CREATE TABLE). Si existen restricciones en la tabla del desencadenador, se comprobar谩n antes de la ejecuci贸n del desencadenador. Si se infringe alguna de las restricciones PRIMARY KEY o FOREIGN KEY, el desencadenador no se ejecuta (no se activa).