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

Disparador que registre unica vez

Estas en el tema de Disparador que registre unica vez en el foro de SQL Server en Foros del Web. Saludos estimados amigos del foro, tengo la siguiente duda. cuento con 2 tablas (Empleado y Cliente) y se necesita crear un disparador que permita registrar ...
  #1 (permalink)  
Antiguo 02/12/2014, 08:12
Avatar de frankjoel86  
Fecha de Ingreso: noviembre-2008
Ubicación: Ica
Mensajes: 295
Antigüedad: 16 años
Puntos: 0
Disparador que registre unica vez

Saludos estimados amigos del foro, tengo la siguiente duda. cuento con 2 tablas (Empleado y Cliente) y se necesita crear un disparador que permita registrar una única vez a un empleado y un solo cliente.

Gracias de antemano por la sugerencia.
__________________
www.basritours.com
Agencia de turismo en Ica.
  #2 (permalink)  
Antiguo 02/12/2014, 08:19
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Disparador que registre unica vez

primero para que un trigger???? si eso lo puedes validar desde el insert

Código SQL:
Ver original
  1. INSERT INTO tabla_destino
  2. SELECT * FROM tabla_origen AS t1
  3. LEFT JOIN tabla_destino AS t2 ON (t1.id=t2.id)
  4. WHERE t2.id IS NULL

asi nada mas se inserta un usuario una sola vez, ademas de que puedes poner Constraits(PK o Unique)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 02/12/2014, 08:47
Avatar de frankjoel86  
Fecha de Ingreso: noviembre-2008
Ubicación: Ica
Mensajes: 295
Antigüedad: 16 años
Puntos: 0
Respuesta: Disparador que registre unica vez

gracias x la respuesta libras. pero dígame utilizando triggers. tuviera alguna sugerencia eh intentado con el siguiente código.

Código SQL:
Ver original
  1. CREATE TRIGGER DIS_REGISTRO
  2. ON EMPLEADOS, CLIENTES
  3. AFTER INSERT
  4. AS
  5. BEGIN
  6. DECLARE @DNIEMP CHAR(8), @NOMBREEMP VARCHAR(30)
  7. DECLARE @DNICLI CHAR(8), @NOMBRECLI VARCHAR(30)
  8.  
  9. INSERT INTO EMPLEADOS VALUES(@DNIEMP, @NOMBREEMP)
  10. INSERT INTO CLIENTES VALUES(@DNICLI, @NOMBRECLI)
  11. END
*Como decirle que registre una sola vez, gracias nuevamente.
__________________
www.basritours.com
Agencia de turismo en Ica.

Última edición por gnzsoloyo; 02/12/2014 a las 09:18
  #4 (permalink)  
Antiguo 02/12/2014, 09:00
Avatar de frankjoel86  
Fecha de Ingreso: noviembre-2008
Ubicación: Ica
Mensajes: 295
Antigüedad: 16 años
Puntos: 0
Respuesta: Disparador que registre unica vez

Por aqui encontre una sugerencia, pero no funciona:
Código SQL:
Ver original
  1. CREATE TRIGGER dis_registro
  2. ON empleado
  3. FOR INSERT
  4. AS
  5. IF (SELECT COUNT(*) FROM inserted)>1
  6. BEGIN
  7.   raiserror('no puede ingresar mas de 1 registro', 16, 1)
  8.   ROLLBACK TRANSACTION
  9. END
__________________
www.basritours.com
Agencia de turismo en Ica.

Última edición por gnzsoloyo; 02/12/2014 a las 09:18
  #5 (permalink)  
Antiguo 02/12/2014, 09:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Disparador que registre unica vez

con triggers:

Código SQL:
Ver original
  1. CREATE TRIGGER dis_registro
  2. ON empleado
  3. FOR INSERT
  4. AS
  5. BEGIN
  6. DECLARE @id INT
  7.  
  8. SELECT @id=id FROM inserted
  9.  
  10. IF(SELECT COUNT(*) FROM empleados  WHERE id=@)=0
  11.     print 'Inserta'
  12. ELSE
  13. BEGIN
  14.     print 'no inserta'
  15.     ROLLBACK TRANSACTION
  16.     RETURN;
  17. END
  18. END
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: disparador, siguiente, tabla, unica, vez
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 12:30.