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

[SOLUCIONADO] Activar Trigger con un valor Especifico en Update

Estas en el tema de Activar Trigger con un valor Especifico en Update en el foro de SQL Server en Foros del Web. Hola gente del foro, espero me puedan ayudar. No he hecho un triggers, pero lo que requiero es que al actualizar un campo en una ...
  #1 (permalink)  
Antiguo 11/02/2015, 06:55
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Activar Trigger con un valor Especifico en Update

Hola gente del foro, espero me puedan ayudar.

No he hecho un triggers, pero lo que requiero es que al actualizar un campo en una tabla poniendole un valor de texto determinado, el registro completo de ese campo debe pasar o copiarse a otra tabla.

Para este ejemplo he creado 2 tablas de prueba, antes de pasar a la aplicacion real:

Código SQL:
Ver original
  1. --La tabla en la que tendre los registros:
  2. CREATE TABLE [dbo].[facturas](
  3.     [num_factura] [nvarchar](20) NULL,
  4.     [fecha] [datetime] NULL,
  5.     [monto] [DECIMAL](18, 2) NULL,
  6.     [estado] [nvarchar](10) NULL
  7. ) ON [PRIMARY]
  8.  
  9.  
  10. --La tabla a la que pasaré los registros QUE CUMPLAN LA CONDICION
  11. CREATE TABLE [dbo].[factu_Trig](
  12.     [num_factura] [nvarchar](20) NULL,
  13.     [fecha] [datetime] NULL,
  14.     [monto] [NUMERIC](18, 2) NULL,
  15.     [estado] [nvarchar](10) NULL
  16. ) ON [PRIMARY]

Ahora La Condicion es que si el estado de un registro es actualizado con el valor 'ingreso', dicho registro sea copiado a la 2da tabla. Por lo tanto estoy realizando el siguiente trigger:

Código SQL:
Ver original
  1. CREATE TRIGGER Validar1
  2.  ON Facturas
  3.  after UPDATE
  4.  AS
  5.  IF UPDATE(estado)
  6.    BEGIN
  7.          DECLARE @num_factura nvarchar(20)
  8.      DECLARE @fecha  datetime
  9.      DECLARE @monto NUMERIC(18,2)
  10.      DECLARE @estado nvarchar(10)
  11.      
  12.      IF @estado = 'ingreso'
  13.          BEGIN
  14.           INSERT INTO factu_trig    (
  15.                         num_factura,
  16.                         fecha,
  17.                         monto,
  18.                         estado)
  19.                         SELECT
  20.                         num_factura,
  21.                         fecha,
  22.                         monto,
  23.                         estado
  24.                         FROM facturas
  25.                         WHERE estado = @estado    
  26.         print ('registro agregado')
  27.         END
  28.  
  29.     ELSE
  30.         BEGIN
  31.                 raiserror('registro NO agregado', 10, 1) --mensaje de error
  32.                 ROLLBACK TRANSACTION
  33.         END
  34.    END

Pero no logro que copie los registros, al parecer nunca cumple la condición.
Por favor, si alguien tiene alguna sugerencia o consejo, o sabe que puedo corregir, le quedaria muy agradecido.


Saludos

Última edición por gnzsoloyo; 11/02/2015 a las 07:19 Razón: Muy MAL etiquetado. usar HGHLIGHT SQL, por favor.
  #2 (permalink)  
Antiguo 11/02/2015, 08:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Activar Trigger con un valor Especifico en Update

Código SQL:
Ver original
  1. CREATE TRIGGER Validar1
  2.  ON Facturas
  3.  after UPDATE
  4.  AS
  5.  
  6.  IF UPDATE(estado)
  7.    BEGIN
  8.          DECLARE @num_factura nvarchar(20)
  9.      DECLARE @fecha  datetime
  10.      DECLARE @monto NUMERIC(18,2)
  11.     DECLARE @estado nvarchar(10)
  12.    SELECT @estado=estado FROM inserted
  13.      
  14.      IF @estado = 'ingreso'
  15.          BEGIN
  16.           INSERT INTO factu_trig    (
  17.                         num_factura,
  18.                         fecha,
  19.                         monto,
  20.                         estado)
  21.                         SELECT
  22.                         num_factura,
  23.                         fecha,
  24.                         monto,
  25.                         estado
  26.                         FROM facturas
  27.                         WHERE estado = @estado    
  28.         print ('registro agregado')
  29.         END
  30.  
  31.     ELSE
  32.         BEGIN
  33.                 raiserror('registro NO agregado', 10, 1) --mensaje de error
  34.                 ROLLBACK TRANSACTION
  35.         END
  36.    END

prueba con algo asi :)

Pregunta, de donde sacabas el valor de @estado???? por obra y arte del espiritu santo???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 11/02/2015, 09:50
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Respuesta: Activar Trigger con un valor Especifico en Update

Libras.
Gracias por responder, en efecto algo obvio se me paso por alto, no tengo dominio en este tema.

El trigger funciona, pero también pasamos algo por alto:
cada vez que se activa el trigger toma TODOS los registros que tienen el valor 'ingreso' en el campo estado y los copia en la tabla de destino, esto causaría que se dupliquen registros por que los vuelve a copiar.

Yo podría mandar a borrar los duplicados de la tabla destino, pero esta tabla destino irá creciendo continuamente y cada vez esta parte del proceso se hará mas pesada y tardará mas la respuesta.

Se puede hacer algo para que el trigger mande a copiar UNICAMENTE aquellos registros que son actualizados ese momento, no los que ya tienen el valor 'ingreso'?


Saludos
  #4 (permalink)  
Antiguo 11/02/2015, 09:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Activar Trigger con un valor Especifico en Update

me gusta el "pasamos todos por alto" aqui seria pasaste por alto ya que es tu proceso y tu eres el que lo conoces, yo solamente respondi el requerimiento inicial, ahora supongamos que tienes un identificador unico en tu tabla entonces podriamos hacer:

Código SQL:
Ver original
  1. CREATE TRIGGER Validar1
  2.  ON Facturas
  3.  after UPDATE
  4.  AS
  5.  
  6.  IF UPDATE(estado)
  7.    BEGIN
  8.          DECLARE @num_factura nvarchar(20)
  9.      DECLARE @fecha  datetime
  10.      DECLARE @monto NUMERIC(18,2)
  11.     DECLARE @estado nvarchar(10)
  12.    DECLARE @identificador INT
  13.    SELECT @estado=estado,@identificador=id FROM inserted
  14.      
  15.      IF @estado = 'ingreso'
  16.          BEGIN
  17.           INSERT INTO factu_trig    (
  18.                         num_factura,
  19.                         fecha,
  20.                         monto,
  21.                         estado)
  22.                         SELECT
  23.                         num_factura,
  24.                         fecha,
  25.                         monto,
  26.                         estado
  27.                         FROM facturas
  28.                         WHERE estado = @estado AND id=@identificador
  29.         print ('registro agregado')
  30.         END
  31.  
  32.     ELSE
  33.         BEGIN
  34.                 raiserror('registro NO agregado', 10, 1) --mensaje de error
  35.                 ROLLBACK TRANSACTION
  36.         END
  37.    END

Y como diria el rayo macqueen: Cachao
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 11/02/2015, 10:14
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Activar Trigger con un valor Especifico en Update

Mi duda siempre ha sido, porque insisten en utilizar los TRIGGERS como parte integral de la lógica del negocio???
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 11/02/2015, 10:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Activar Trigger con un valor Especifico en Update

Para mi, porque siempre buscan soluciones automágicas...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/02/2015, 14:37
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Activar Trigger con un valor Especifico en Update

¿AUTOMAGICAS?, gnzsoloyo, me hiciste el día !!!, ajajajjajaajaja
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 11/02/2015, 15:17
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Respuesta: Activar Trigger con un valor Especifico en Update

Libras.

Gracias por la ayuda, parece que ya lo tengo.

iislas, vi que en otro tema hacias referencia tambien a no usar triggers en esta parte del proceso, pero en mi corta experiencia no se me ocurrió nada mas, Sin entrar en detalles, y según tu lógica y experiencia, que otra opción considerar para solucionar un problema como el aqui planteado?

Saludos
  #9 (permalink)  
Antiguo 11/02/2015, 15:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Activar Trigger con un valor Especifico en Update

para que ocupas ese proceso???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 11/02/2015, 16:29
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Respuesta: Activar Trigger con un valor Especifico en Update

La empresa tiene una aplicación (un gestor documental) la cual solo puede modificar datos en la DB mediante su interfase, si se realizan modificaciones desde la base no se registran en la Aplicacion, por que al parecer es algo compleja y supongo que guarda la misma información en mas de una tabla.

Cuando se realizan compras en la empresa, mediante esa aplicación se registra el movimiento. Como esa aplicación es de diseño cerrado y no se puede modificar, se requiere obtener ese movimiento, es ahí que yo requiero "extraer" ese registro para poder trabajarlo en una aplicación de mi desarrollo, por que hay que agregar otra información proveniente de otras fuentes.

Por eso apenas se registre un cambio con la otra aplicación, debe pasar a la base de datos de mi aplicación, sin afectar los datos de la primera, y así ir alimentando los datos de la mia.

Saludos
  #11 (permalink)  
Antiguo 11/02/2015, 16:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Activar Trigger con un valor Especifico en Update

si requieres extraer la informacion de esa base de datos, para un entorno de pruebas, porque no haces una carga diaria???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 11/02/2015, 18:11
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Respuesta: Activar Trigger con un valor Especifico en Update

Ese es uno de los problemas.

Tienen un sistema contable muy antiguo (Siigo) que no funciona con DB, se carga información movimiento por movimiento en archivos planos con cadenas larguísimas llenas de ceros y la información debe estar disponible de inmediato, por lo tanto yo debo tomar información de las distintas bases de datos armar esos archivos y alimentar ese sistema tan antipático.

De ahí que cada movimiento registra valores que yo convierto para alimentar ese sistema contable y por eso consideré el trigger.

Saludos
  #13 (permalink)  
Antiguo 11/02/2015, 21:05
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Activar Trigger con un valor Especifico en Update

Angel, en tu caso se justifica
__________________
MCTS Isaias Islas

Etiquetas: campo, especifico, select, siguiente, tabla, trigger, update, valor
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 11:35.