Manual por favor!!!!!!!!!!!!!!!!!

yerald_22
30 de Diciembre del 2004
Hola, necesito un manual de SQL Server 2000 en el que salga c贸mo hacer triggers y todo lo b谩sico... si alguien me puede ayudar se lo agradecer铆a mucho!!!!!!!!! gracias

GabrielSR2004
30 de Diciembre del 2004
Esto te servira

http://www.microsoft.com/downloads/details.aspx?FamilyID=a6f79cb1-a420-445f-8a4b-bd77a7da194b&DisplayLang=es

eric daniel
30 de Diciembre del 2004
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).

eric daniel
30 de Diciembre del 2004
Ejemplo:

CREATE TRIGGER ActualizaLocalidad on MOVIMIENTO
FOR INSERT
AS
DECLARE @sLocalidad CHAR(10), @sRemolque CHAR(10), @nOrdenViaje FLOAT,
@dFechaLocFin DateTime, @dMovHoraLocFin DateTime, @nMovimiento FLOAT ,
@sChofer CHAR(10), @sUnidad CHAR(10), @nMovRecibo FLOAT, @sTipoCarga CHAR(1),
@sLocIni CHAR(10),
@dFecArrLocIni DATETIME, @dHoraArrLocIni DATETIME,
@dFecSalLocIni DATETIME, @dHoraSalLocIni DATETIME,
@dFecArrLocFin DATETIME, @dHoraArrLocFin DATETIME,
@dFecSalLocFin DATETIME, @dHoraSalLocFin DATETIME,
@iStatus INTEGER,
@dFechaAct DATETIME,
@dMovHoraAct DATETIME
BEGIN
SELECT @nMovimiento = Movimiento, @sLocalidad = MOVLOCFIN, @nOrdenViaje = OrdenViaje,
@sRemolque = REMOLQUE,
@sChofer= CHOFER, @sUnidad=UNIDAD, @nMovRecibo=MovRecibo, @sLocIni = MovLocInicio,
@sTipoCarga = TipoCarga,
@dFechaLocFin = MovFecArrLocFin, @dMovHoraLocFin = MovHorArrLocFin,

@dFecArrLocIni = MovFecArrLocIni, @dHoraArrLocIni = MovHorArrLocIni, -- Arribo Loc Ini
@dFecSalLocIni = MovFecSalLocIni, @dHoraSalLocIni = MovHorSalLocIni, -- Salida Loc Ini
@dFecArrLocFin = MovFecArrLocFin, @dHoraArrLocFin = MovHorArrLocFin, -- Arribo Loc Fin
@dFecSalLocFin = MovFecSalLocFin, @dHoraSalLocFin = MovHorSalLocFin -- Salida Loc Fin
FROM inserted MOVIMIENTO

print 'Insert'
print @nMovimiento
print @sLocalidad
print @sRemolque
print @dFechaLocFin
print @dMovHoraLocFin

IF ( @dFecArrLocFin IS NOT NULL ) AND ( @dHoraArrLocFin IS NOT NULL )
BEGIN
IF @sTipoCarga = 'S'
BEGIN
UPDATE REMOLQUE SET REMOLQUE.REMLOCALIZA = @sLocalidad,
REMOLQUE.MOVIMIENTO = @nMovimiento,
REMOLQUE.MOVFECHA = @dFechaLocFin,
REMOLQUE.MOVHORA = @dMovHoraLocFin,
REMOLQUE.REMDISPONIBLE='N'
WHERE REMOLQUE.REMOLQUE = @sRemolque
END
ELSE IF @sTipoCarga = 'N'
BEGIN
UPDATE REMOLQUE SET REMOLQUE.REMLOCALIZA = @sLocalidad,
REMOLQUE.MOVIMIENTO = @nMovimiento,
REMOLQUE.MOVFECHA = @dFechaLocFin,
REMOLQUE.MOVHORA = @dMovHoraLocFin,
REMOLQUE.REMDISPONIBLE = 'S'
WHERE REMOLQUE.REMOLQUE = @sRemolque
END

UPDATE Chofer SET ChoDisponible ='S' WHERE Chofer= @sChofer

UPDATE Unidad SET UniDisponible ='S' WHERE Unidad=@sUnidad
END
ELSE
BEGIN
UPDATE REMOLQUE SET
REMOLQUE.REMDISPONIBLE = 'N'
WHERE REMOLQUE.REMOLQUE = @sRemolque

UPDATE Chofer SET ChoDisponible ='N' WHERE Chofer= @sChofer

UPDATE Unidad SET UniDisponible ='N' WHERE Unidad=@sUnidad
END

SET @iStatus = 0

IF ( @nOrdenVIaje <> 0 )
BEGIN
if ( Select OrdLocFin from OrdenViaje where OrdenViaje = @nOrdenViaje and OrdStatus < 4 ) = @sLocalidad
BEGIN
Update OrdenViaje set OrdStatus = 4, OrdFecFin = @dFechaLocFin Where OrdenViaje= @nOrdenViaje and OrdStatus < 4
SET @iStatus = 1
END

if (( Select OrdStatus from OrdenViaje where OrdenViaje = @nOrdenViaje ) = 1) or
((( Select OrdLocFin from OrdenViaje where OrdenViaje = @nOrdenViaje ) = @sLocalidad) AND (Select OrdEscalas from OrdenViaje where OrdenViaje = @nOrdenViaje) = (Select Count(Movimiento) from Movimiento where OrdenViaje = @nOrdenViaje))
BEGIN
Update OrdenViaje set OrdStatus = 3 Where OrdenViaje= @nOrdenViaje
END


IF ( @dFecSalLocFin IS NOT NULL ) AND ( @dHoraSalLocFin IS NOT NULL ) -- Arribo Loc Fin
BEGIN
SET @dFechaAct = @dFecSalLocFin
SET @dMovHoraAct = @dHoraSalLocFin
END
ELSE IF ( @dFecArrLocFin IS NOT NULL ) AND ( @dHoraArrLocFin IS NOT NULL ) -- Arribo Loc Fin
BEGIN
SET @dFechaAct = @dFecArrLocFin
SET @dMovHoraAct = @dHoraArrLocFin
END
ELSE IF ( @dFecArrLocFin IS NOT NULL ) AND ( @dHoraSalLocIni IS NOT NULL ) -- Salida Loc Ini
BEGIN
SET @dFechaAct = @dFecSalLocIni
SET @dMovHoraAct = @dHoraSalLocIni
END
ELSE IF ( @dFecArrLocFin IS NOT NULL ) AND ( @dHoraArrLocIni IS NOT NULL ) -- Arribo Loc Ini
BEGIN
SET @dFechaAct = @dFecArrLocIni
SET @dMovHoraAct = @dHoraArrLocIni
END

IF @iStatus = 0
BEGIN
UPDATE OrdenViaje SET ActMovimiento = @nMovimiento,
ActUnidad = @sUnidad,
ActRemolque = @sRemolque,
ActChofer = @sChofer,
ActMovLocIni = @sLocIni,
ActMovLocFin = @sLocalidad,
ActMovFecha = @dFechaAct,
ActMovHora = @dMovHoraAct,
ActTipoCarga = @sTipoCarga,
ActRecibo = @nMovRecibo
WHERE OrdenViaje= @nOrdenViaje
END
ELSE
BEGIN
UPDATE OrdenViaje SET ActMovimiento = NULL,
ActUnidad = '',
ActRemolque = '',
ActChofer = '',
ActMovLocIni = '',
ActMovLocFin = '',
ActMovFecha = NULL,
ActMovHora = NULL,
ActTipoCarga = '',
ActRecibo = NULL
WHERE OrdenViaje= @nOrdenViaje

END
END

END