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 ..

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
27/11/2006 - 17:04 | Informe spam
jpablos,

Ese es uno de los contras que se tiene cuando se usa una columna que se
numera mediante un procedimiento almacenado, se pierde la posibilidad de
hacer inserciones en masa. La unica forma sera insertarlos de uno en uno,
fila a fila, usando un cursor o un lazo.

AMB


"jpablos" wrote:

Mostrar la cita
#2 Monica Rivera
27/11/2006 - 19:16 | Informe spam
Puede que no sea la mejor solucion, pero funciona. Creando una tabla temporal
con un campo identidad y dinamicamente asignandole el seed, se puede.
Trate de usar una variable de tipo tabla,pero desafortunadamente no se le
puede pasar el seed mediante una variable...
Aqui va, asume que el codigo de la persona es una campo llamado
codigo_persona en la tabla gtge_personas:

declare @codigo_empresa_origen numeric,
@codigo_empresa_destino numeric,
@primer_codigopersona int,
@sql varchar(1000)

select @codigo_empresa_origen = 1, @codigo_empresa_destino =
148,@primer_codigopersona=max(codigo_persona)+1 from gtge_personas

set @sql='create table ##personas (id int identity(' +
convert(varchar(10),@primer_codigopersona)
set @sql=@sql+',1),codigo_empresa_destino int,identificacion char(10),nombre
char(30),tipo_identificacion int)'
exec (@sql)

insert into ##personas
(codigo_empresa_destino,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

insert into gtge_personas(
codigo_persona,
codigo_empresa,
identificacion,
nombre,
tipo_identificacion)
select id,codigo_empresa_destino,identificacion,nombre,tipo_identificacion
from ##personas

drop table ##personas


"Alejandro Mesa" wrote:

Mostrar la cita
#3 Alejandro Mesa
27/11/2006 - 19:22 | Informe spam
Monica,

Ejecuta ese script en dos conxiones dieferentes y al mismo tiempo, veras lo
que ocurre.


AMB


"Monica Rivera" wrote:

Mostrar la cita
#4 Monica Rivera
27/11/2006 - 19:33 | Informe spam
Lo se. No es ideal para conecciones simultaneas.

"Alejandro Mesa" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida