Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

TRIGER duda

Estas en el tema de TRIGER duda en el foro de SQL Server en Foros del Web. Tengo el siguiente trigger, como puedo pasar 2 datos que tiene la tabla pruebas a la tabla de control. por ejemplo La tabla prueba tiene ...
  #1 (permalink)  
Antiguo 22/05/2009, 15:37
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 9 meses
Puntos: 1
Pregunta TRIGER duda

Tengo el siguiente trigger, como puedo pasar 2 datos que tiene la tabla pruebas a la tabla de control. por ejemplo
La tabla prueba tiene los siguientes campos.Matricula y Fecha,Nombre etc etc

como puedo pasarle la matricula y la Fecha a la Tabla de Control???
de La Tabla de Pruebas a la Tabla de COntrol

CREATE TRIGGER tr_add_reg_tabla_control
ON Pruebas
FOR INSERT
AS
Insert Into Tabla_Control (Matricula,Fecha )
values(@Matricula,@Fecha)

Grcias de Antemano y Saludos
  #2 (permalink)  
Antiguo 22/05/2009, 15:58
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 6 meses
Puntos: 220
Respuesta: TRIGER duda

Código sql:
Ver original
  1. CREATE TRIGGER Tr_AddControl
  2. ON Pruebas
  3. FOR INSERT
  4. AS
  5.    BEGIN TRANSACTION
  6.  
  7.    DECLARE @Matricula VARCHAR(150),@Fecha Datetime -- declarando variables
  8.    
  9.    SELECT @Matricula = Matricula,@Fecha = Fecha FROM Inserted -- tomando las variables insertadas en la tabla temporal del trigger
  10.  
  11.    INSERT INTO Tabla_Control(Matricula,Fecha) VALUES(@Matricula,@Fecha);
  12.    
  13.    IF @@error = 0
  14.       Commit TRANSACTION
  15.    ELSE
  16.       ROLLBACK TRANSACTION
  17. GO
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 22/05/2009, 16:48
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: TRIGER duda

si me Funciono, Muchas gracias. Una cosa mas =S

por ejemplo si la Tabla Pruebas tiene un campo que se llama estado
el estado puede ser ="A" o "E" o "I"
Si quiero que ese trigger solo lo ejecute cuando se agregue un registro con estado="A"
Donde coloco esa Informacion
  #4 (permalink)  
Antiguo 22/05/2009, 18:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: TRIGER duda

Dradi7

No perdamos de vista que la tabla INSERTED puede tener mas de un registro, ademas, no creo que sea necesario declarar variables:

INSERT INTO Tabla_Control(Matricula,Fecha)
SELECT Matricula, Fecha FROM Inserted

Ojo, insisto, la tabla INSERTED puede traer MUCHOS, MUCHOS REGISTROS !!!

Saludos
  #5 (permalink)  
Antiguo 28/05/2009, 11:15
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: TRIGER duda

me quedo esta duda

por ejemplo si la Tabla Pruebas tiene un campo que se llama estado
el estado puede ser ="A" o "E" o "I"
Si quiero que ese trigger solo lo ejecute cuando se agregue un registro con estado="A"
Donde coloco esa Informacion
  #6 (permalink)  
Antiguo 28/05/2009, 13:55
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 6 meses
Puntos: 220
Respuesta: TRIGER duda

Código sql:
Ver original
  1. CREATE TRIGGER Tr_AddControl
  2. ON Pruebas
  3. FOR INSERT
  4. AS
  5.    BEGIN TRANSACTION
  6.  
  7.    DECLARE @Estado CHAR(1) -- declarando variables
  8.    
  9.    SELECT @Estado = Estado FROM Inserted -- tomando las variables insertadas en la tabla temporal del trigger
  10.  
  11.    IF @Estado = "A"
  12.        INSERT INTO Tabla_Control(Matricula,Fecha) SELECT Matricula,Fecha FROM Inserted
  13.    
  14.    IF @@error = 0
  15.       Commit TRANSACTION
  16.    ELSE
  17.       ROLLBACK TRANSACTION
  18. GO

Como dice Iislas el inserted puede traer muchos pero muchos campos dependiendo claro a la cantidad de campos de la tabla que estamos aplicando el Trigger
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #7 (permalink)  
Antiguo 28/05/2009, 15:24
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: TRIGER duda

Ademas de MUCHOS CAMPOS, podria, en su caso, TRAER MUCHOS REGISTROS y por ende, esto no funcionaria

SELECT @Estado = Estado FROM Inserted
  #8 (permalink)  
Antiguo 28/05/2009, 15:45
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 6 meses
Puntos: 220
Respuesta: TRIGER duda

que yo sepa el trigger funciona por cada registro q se este insertando si tengo digamos 10 registros para insertar el trigger se dispara 10 veces lo cual no causaria error
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #9 (permalink)  
Antiguo 28/05/2009, 17:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: TRIGER duda

Dradi7

¿Que crees?

Que NO, el trigger se dispara 1 vez y en la tabla de paso almacena los 10, 20, 50, 10,000, 300,000 registros.....

Por eso mi afirmacion, lean su AYUDA EN LINEA....please.....

Si yo hago un

DELETE CLIENTE WHERE Tipo_Cliente = 1

Y se borran 10,000 registros y tengo un trigger que me pase eso a un historico de clientes borrados, el trigger se veria asi.


CREATE TRIGGER trg_DeleteCliente
ON CLIENTE
FOR DELETE
AS
INSERT INTO CLIENTE_HISTORICO
SELECT * FROM DELETED

Este me copiara los 10,000 registros borrados...........

Saludos
  #10 (permalink)  
Antiguo 01/06/2009, 14:38
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: TRIGER duda

me quedo esta duda

por ejemplo si la Tabla Pruebas tiene un campo que se llama estado
el estado puede ser ="A" o "E" o "I"

Si quiero que ese trigger solo lo ejecute cuando se agregue un registro donde estado="A"
  #11 (permalink)  
Antiguo 01/06/2009, 22:04
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: TRIGER duda

compañer@, Dradi7 te lo contesto:

IF @Estado = "A"
INSERT INTO Tabla_Control(Matricula,Fecha) SELECT Matricula,Fecha FROM Inserted

Solo lee tambien las observaciones que he hecho
  #12 (permalink)  
Antiguo 02/06/2009, 10:17
 
Fecha de Ingreso: marzo-2006
Mensajes: 124
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: TRIGER duda

es cierto jjaja muchas gracias a todos problema Resuelto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.