Ver Mensaje Individual
  #6 (permalink)  
Antiguo 03/08/2012, 20:26
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 2 meses
Puntos: 85
Respuesta: Dudas en INSERT

No comentas mucho sobre cuál es el objetivo de pasar los datos de una base a la otra, pero si el campo ID_Venta es la clave que define la relación entre T_Venta y T_Detalle en la base DB_Cliente, entonces no deberías cambiar su valor al pasar los datos a DB_Servidor, es decir, el campo ID_Venta en DB_Servidor no debería ser identity.

Dicho esto, tienes dos formas de pasar los datos con ID_Venta autoincremental manteniendo la relación entre las tablas (los ejemplos son pseudocódigo):

1. Un cursor más las funciones @@identity, scope_identity() o ident_current().

Código:
declare cur_t_venta cursor for 
 select * from db_cliente.dbo.t_venta
declare @fecha datetime
declare @cliente varchar
declare @monto int
declare @id_venta int

fetch next from cur_t_venta
 into @fecha, @cliente, @monto, @id_venta
while @@fetch_status=0
begin
 insert into db_servidor.dbo.t_venta
 values (@fecha, @cliente, @monto)
 
 insert into db_servidor.dbo.t_detalle
 select articulo, monto, @@identity
 from db_cliente.dbo.t_detalle
 where id_venta = @id_venta

 fetch next from cur_t_venta
  into @fecha, @cliente, @monto, @id_venta
end
2. Un insert..select con un campo auxiliar más un update.

Código:
alter table db_servidor.dbo.t_venta add id_venta_original int

insert into db_servidor.dbo.t_venta 
 (fecha, cliente, monto, id_venta_original)
select fecha, cliente, monto, id_venta
from db_cliente.dbo.t_venta

insert into db_servidor.dbo.t_detalle
select articulo, monto, id_venta
from db_cliente.dbo.t_detalle

update db_servidor.dbo.t_detalle
set t_detalle.id_venta = t_venta.id_venta
from db_servidor.dbo.t_venta
where t_detalle.id_venta = t_venta.id_venta_original

alter table db_servidor.dbo.t_venta drop id_venta_original
Saludos