Ayuda con un insert - select

27/11/2006 - 16:23 por jpablos | Informe spam
Saludos .

Yo tenia una instruccion sql de la siguiente manera:

declare @codigo_empresa_origen numeric,
@codigo_empresa_destino numeric

select @codigo_empresa_origen = 1, @codigo_empresa_destino = 148

insert into
gtge_personas(codigo_empresa,identificacion,nombre,tipo_identificacion)
select @codigo_empresa_destino,a.identificacion,a.nombre,a.tipo_identificacion
from gtge_personas a
where a.codigo_empresa = @codigo_empresa_origen
and not exists(select b.identificacion from gtge_personas as b where
b.codigo_empresa = @codigo_empresa_destino and b.identificacion =
a.identificacion)
order by a.nombre

Que lo que hacia es insertarme en la tabla gtge_personas todas las personas
que estaban en la empresa origen y que no se encontraban en la empresa de
destino, el codigo de las personas era de tipo identity por lo que al
insertarse se incrementaba en uno automaticamente, pero se hicieron cambios
en las tablas y el campo que antes era identity ahora ya no lo es por lo que
cuando se crea una persona se busca el maximo codigo y se le suma 1, como
puedo hacer en el select de arriba se inserte el codigo de la persona que
antes era de tipo identity y ahora no lo es ?????

Gracias ..
 

Leer las respuestas

#1 Javier Loria
28/11/2006 - 03:40 | Informe spam
Hola:
Prueba lo siguiente:
==ÞCLARE @codigo_empresa_origen numeric
, @codigo_empresa_destino numeric
, @codigo_persona
SELECT @codigo_empresa_origen = 1, @codigo_empresa_destino = 148
SELECT @codigo_persona=MAX(codigo_persona)
FROM gtge_personas
ON codigo_empresa = @codigo_empresa_destino

INSERT INTO
gtge_personas(codigo_empresa,identificacion,nombre,tipo_identificacion,
Codigo_Persona)
SELECT @codigo_empresa_destino AS codigo_empresa
, a.identificacion
, a.nombre
, a.tipo_identificacion
, @codigo_persona+COUNT(*) AS Codigo_Persona
FROM ( SELECT a.identificacion
, a.nombre
, a.tipo_identificacion
FROM gtge_personas a
LEFT JOIN gtge_personas b
ON a.codigo_empresa = @codigo_empresa_origen
AND b.codigo_empresa = @codigo_empresa_destino
AND a.identificacion=b.identificacion
WHERE a.identificacion IS NULL) AS NuevasA
JOIN ( SELECT a.identificacion
FROM gtge_personas a
LEFT JOIN gtge_personas b
ON a.codigo_empresa = @codigo_empresa_origen
AND b.codigo_empresa = @codigo_empresa_destino
AND a.identificacion=b.identificacion
WHERE a.identificacion IS NULL
) AS NuevasB
ON NuevasA.identificacion>=NuevasB.identificacion
GROUP BY NuevasA.identificacion, NuevasA.nombre,
NuevasA.tipo_identificacion
== Va sin chequear asi que puede ser que tenga problemas de sintaxis.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning

"jpablos" wrote in message
news:
Saludos .

Yo tenia una instruccion sql de la siguiente manera:

declare @codigo_empresa_origen numeric,
@codigo_empresa_destino numeric

select @codigo_empresa_origen = 1, @codigo_empresa_destino = 148

insert into
gtge_personas(codigo_empresa,identificacion,nombre,tipo_identificacion)
select
@codigo_empresa_destino,a.identificacion,a.nombre,a.tipo_identificacion
from gtge_personas a
where a.codigo_empresa = @codigo_empresa_origen
and not exists(select b.identificacion from gtge_personas as b where
b.codigo_empresa = @codigo_empresa_destino and b.identificacion > a.identificacion)
order by a.nombre

Que lo que hacia es insertarme en la tabla gtge_personas todas las
personas
que estaban en la empresa origen y que no se encontraban en la empresa de
destino, el codigo de las personas era de tipo identity por lo que al
insertarse se incrementaba en uno automaticamente, pero se hicieron
cambios
en las tablas y el campo que antes era identity ahora ya no lo es por lo
que
cuando se crea una persona se busca el maximo codigo y se le suma 1, como
puedo hacer en el select de arriba se inserte el codigo de la persona que
antes era de tipo identity y ahora no lo es ?????

Gracias ..

Preguntas similares