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

Como hacer trigger para esto sin cursor

Estas en el tema de Como hacer trigger para esto sin cursor en el foro de SQL Server en Foros del Web. AMIGOS TENGO LO SIGUIENTE: una tabla cliente con su rut su nombre y apellido. una tabla cliente_Contacto con el rut , email y telefono. una ...
  #1 (permalink)  
Antiguo 04/10/2011, 06:54
Avatar de bbriones89  
Fecha de Ingreso: marzo-2011
Ubicación: RENCA
Mensajes: 26
Antigüedad: 13 años, 1 mes
Puntos: 0
Como hacer trigger para esto sin cursor

AMIGOS TENGO LO SIGUIENTE:

una tabla cliente con su rut su nombre y apellido.
una tabla cliente_Contacto con el rut , email y telefono.
una tabla cliente_otros con su rut, direccion, comuna,celular.
(Estas tablas son solo un ejemplo de lo real que son como 50 datos)

Bueno lo que necesito es que si se actualiza una de estas tablas o se inserta un cliente todos los datos se copien en una tabla llamada cliente_traspaso_BD que tiene la sigueitne estructura :

rut,nombre,apellido,email,fono,celular,direccion,c omuna.

bueno se que suena simple pero veamos el siguiente caso.
yo lo tengo con un cursor y me funcionan perfecto los trigger de la sgte manera :
CREATE TRIGGER [dbo].[TRG_CLIENTE_CONTACTO]
ON [dbo].[CLIENTE]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
declare @value AS varchar (100)
declare @anniversary AS varchar(1)
DECLARE @RUT AS VARCHAR(15)
DECLARE @NOMBRE AS VARCHAR (100)
DECLARE @APELLIDO AS VARCHAR (100)
DECLARE @EMAIL AS VARCHAR(100)
DECLARE @FONO ASVARCHAR(15)
DECLARE @CELULAR AS VARCHAR(15)
DECLARE @DIRECCION AS VARCHAR(100)
DECLARE @COMUNA AS VARCHAR(20)


declare cursor_CLIENTE cursor for select RUT,NOMBRE,APELLIDO FROM INSERTED
open cursor_CLIENTE
fetch next from cursor_CLIENTE into @RUT,@NOMBRE,@APELLIDO

while @@FETCH_STATUS = 0

BEGIN

SET @EMAIL = (SELECT EMAIL FROM [dbo].[CLIENTE_CONTACTO] WHERE RUT = @RUT)
SET @FONO = (SELECT FONO FROM [dbo].[CLIENTE_CONTACTO] WHERE RUT = @RUT)
SET @CELULAR = (SELECT CIVILITE FROM [dbo].[CLIENTE_OTROS] WHERE NOCLI =@NOCLI)
SET @DIRECCION = (SELECT DIRECCION FROM [dbo].[CLIENTE_OTROS] WHERE RUT = @RUT)
SET @COMUNA= (SELECT COMUNA FROM [dbo].[CLIENTE_OTROS] WHERE RUT = @RUT)


BEGIN
INSERT INTO [enjoy].[dbo].[BUC_tmp_mcc_buc]
values(
@RUT,
@NOMBRE,
@APELLIDO,
@MAIL,
@FONO,
@CELULAR,
@DIRECCION,
@COMUNA
)

END
fetch next from cursor_CLIENTE into @RUT,@NOMBRE,@APELLIDO
END

close cursor_CLIENTE
deallocate cursor_CLIENTE
END


bueno esto funciona a la perfeccion con cargas masivas, actualizaciones todo todo.
Cuando lo hago sin cursor y se actualiza mas de un cliente al mismo tiempo pj:
update cliente SET nombre=nombre para que haga un update a todos los clientes y se pasen a la temporal, no funciona ya que viene mas de un RUT y al comprar devuelve un error, pero con este cursor no pasa eso ya que es como que recorriera el triggers y tomara a los clientes de a UNO.
Necesito hacer esto pero sin cursor y no se me ocurre como puede ser.
Espero me ayuden SL2.

puedo usar SP, TRIGGER Y LO QUE SEA MENOS CURSORES.

Etiquetas: cursor, select, tabla, trigger
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 20:27.