Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/10/2011, 06:54
Avatar de bbriones89
bbriones89
 
Fecha de Ingreso: marzo-2011
Ubicación: RENCA
Mensajes: 26
Antigüedad: 13 años, 2 meses
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.