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).