Insertar datos en varias tablas con identidad única.

25/07/2006 - 19:59 por Marcelo Clavero | Informe spam
Estimados:

Tengo una tabla A, una B y una C.
A. Facturas Pendientes de Emisión (sin nro), llegan de una agencia.
B. Facturas definitivas
C. Detalle de las facturas.

Debo volcar A en (B y C) y es en B donde se genera el nro. de factura.
El problema se me plantea para volcar en C, ya que debo poner el nro. de
factura que se generó en B, además de los campos de detalle que están en A.

Como ejemplo, pongo estructuras simplificadas.
=A. FAC_AGENCIA
- id_cliente
- monto
- detalle

B. FACTURAS
- id_nro (identidad automática)
- id_cliente
- monto

C. DETALLES
- id_nro
- detalle

Desde ya Muchas Gracias.
Y saludos al foro.
Marcelo Clavero

Preguntas similare

Leer las respuestas

#1 Isaias
25/07/2006 - 21:37 | Informe spam
¿Y como pretendes (o lo estas) haciendo?

Digo, cual es la logica, yo utilizaria un script con un WHILE recorriendo la
tabla A e insertando en la tabla B, una vez hecho esto, insertaria en la
tabla C, asi, hasta terminar de recorrer el WHILE.

¿Cual es tu logica de inserccion? (tienes un script)
Saludos
IIslas


"Marcelo Clavero" wrote:

Estimados:

Tengo una tabla A, una B y una C.
A. Facturas Pendientes de Emisión (sin nro), llegan de una agencia.
B. Facturas definitivas
C. Detalle de las facturas.

Debo volcar A en (B y C) y es en B donde se genera el nro. de factura.
El problema se me plantea para volcar en C, ya que debo poner el nro. de
factura que se generó en B, además de los campos de detalle que están en A.

Como ejemplo, pongo estructuras simplificadas.
=> A. FAC_AGENCIA
- id_cliente
- monto
- detalle

B. FACTURAS
- id_nro (identidad automática)
- id_cliente
- monto

C. DETALLES
- id_nro
- detalle

Desde ya Muchas Gracias.
Y saludos al foro.
Marcelo Clavero



Respuesta Responder a este mensaje
#2 Marcelo Clavero
25/07/2006 - 22:11 | Informe spam
Isaías, gracias por tu respuesta.

No tengo un scriptpensé que tal vez se pueda resolver con alguna
sentencia por lote, por ejemplo un INSERT INTO ... SELECT...(que no me
doy idea de como hacerlo).

Resolverlo con WHILE, recorriendo la tabla A en insertando en B y C, me
recuerda a mi vieja forma de programar. He leído por ahí que esto implica el
uso de Cursores en SQL y que no son muy eficaces. ¿ es cierto ?

En caso de que nadie me pueda indicar una sentencia por lote de datos,
aplicaré tu sugerencia de recorrer cada registro. Gracias de nuevo.


"Isaias" escribió en el mensaje
news:
¿Y como pretendes (o lo estas) haciendo?

Digo, cual es la logica, yo utilizaria un script con un WHILE recorriendo
la
tabla A e insertando en la tabla B, una vez hecho esto, insertaria en la
tabla C, asi, hasta terminar de recorrer el WHILE.

¿Cual es tu logica de inserccion? (tienes un script)
Saludos
IIslas


"Marcelo Clavero" wrote:

Estimados:

Tengo una tabla A, una B y una C.
A. Facturas Pendientes de Emisión (sin nro), llegan de una agencia.
B. Facturas definitivas
C. Detalle de las facturas.

Debo volcar A en (B y C) y es en B donde se genera el nro. de factura.
El problema se me plantea para volcar en C, ya que debo poner el nro. de
factura que se generó en B, además de los campos de detalle que están en
A.

Como ejemplo, pongo estructuras simplificadas.
=>> A. FAC_AGENCIA
- id_cliente
- monto
- detalle

B. FACTURAS
- id_nro (identidad automática)
- id_cliente
- monto

C. DETALLES
- id_nro
- detalle

Desde ya Muchas Gracias.
Y saludos al foro.
Marcelo Clavero



Respuesta Responder a este mensaje
#3 Miguel Egea
25/07/2006 - 23:11 | Informe spam
A mi me paso, con el mensaje que dejaba el log de la instalación busqué en
internet y tras muchos intentos pude hacerlo sin reinstalr mi pc, había que
borrar varias claves del registro, que las versiones beta no desinstalan,
pero no recuerdo cuales, ni el link ni nada, ya lo siento, espero que al
menos la pista te ayude a solucionarlo

Saludos
Miguel Egea
"Marcelo Clavero" wrote in message
news:%
Estimados:

Tengo una tabla A, una B y una C.
A. Facturas Pendientes de Emisión (sin nro), llegan de una agencia.
B. Facturas definitivas
C. Detalle de las facturas.

Debo volcar A en (B y C) y es en B donde se genera el nro. de factura.
El problema se me plantea para volcar en C, ya que debo poner el nro. de
factura que se generó en B, además de los campos de detalle que están en
A.

Como ejemplo, pongo estructuras simplificadas.
=> A. FAC_AGENCIA
- id_cliente
- monto
- detalle

B. FACTURAS
- id_nro (identidad automática)
- id_cliente
- monto

C. DETALLES
- id_nro
- detalle

Desde ya Muchas Gracias.
Y saludos al foro.
Marcelo Clavero


Respuesta Responder a este mensaje
#4 Miguel Egea
25/07/2006 - 23:21 | Informe spam
bueno la idea sería la siguiente
1.-Abres transaccon
2.- bloqueas la tabla completa por 1 instante
3.- Insertas el primer registro y recoges el valor de SCOPE_IDENTITY() en
una variable
4.- ejecutas dbcc checkident para cambiar el valor de identidad a lo que
valga mas el número de registros a insertar
5.- liberas el bloqueo, (debió ser muy chiquitillo).
6.- insertas usando algo así como
select identity(int)+@elidentityqueobtuviste as cod,tuscampos
into destino
from tu tabla
7.- haces lo mismo en la segunda tabla :)

Saludos
Miguel Egea

"Marcelo Clavero" wrote in message
news:
Isaías, gracias por tu respuesta.

No tengo un scriptpensé que tal vez se pueda resolver con alguna
sentencia por lote, por ejemplo un INSERT INTO ... SELECT...(que no me
doy idea de como hacerlo).

Resolverlo con WHILE, recorriendo la tabla A en insertando en B y C, me
recuerda a mi vieja forma de programar. He leído por ahí que esto implica
el uso de Cursores en SQL y que no son muy eficaces. ¿ es cierto ?

En caso de que nadie me pueda indicar una sentencia por lote de datos,
aplicaré tu sugerencia de recorrer cada registro. Gracias de nuevo.


"Isaias" escribió en el mensaje
news:
¿Y como pretendes (o lo estas) haciendo?

Digo, cual es la logica, yo utilizaria un script con un WHILE recorriendo
la
tabla A e insertando en la tabla B, una vez hecho esto, insertaria en la
tabla C, asi, hasta terminar de recorrer el WHILE.

¿Cual es tu logica de inserccion? (tienes un script)
Saludos
IIslas


"Marcelo Clavero" wrote:

Estimados:

Tengo una tabla A, una B y una C.
A. Facturas Pendientes de Emisión (sin nro), llegan de una agencia.
B. Facturas definitivas
C. Detalle de las facturas.

Debo volcar A en (B y C) y es en B donde se genera el nro. de factura.
El problema se me plantea para volcar en C, ya que debo poner el nro. de
factura que se generó en B, además de los campos de detalle que están en
A.

Como ejemplo, pongo estructuras simplificadas.
=>>> A. FAC_AGENCIA
- id_cliente
- monto
- detalle

B. FACTURAS
- id_nro (identidad automática)
- id_cliente
- monto

C. DETALLES
- id_nro
- detalle

Desde ya Muchas Gracias.
Y saludos al foro.
Marcelo Clavero









Respuesta Responder a este mensaje
#5 Peter
25/07/2006 - 23:39 | Informe spam
Hola Marcelo,

Efectivamente, hay una solución mucho más sencilla y efectiva que el uso de
cursores.

Como el número de factura se genera automáticamente, ya que al campo le has
aplicado la propiedad IDENTITY(x, y), el script que yo utilizaría es el
siguiente:


INSERT INTO Facturas (id_cliente, detalle)
SELECT id_cliente, monto FROM Fac_Agencia

INSERT INTO Detalles (id_nro, detalle)
SELECT @@IDENTITY, detalle FROM Fac_Agencia


La variable @@IDENTITY recupera el último valor de identidad generado para
la sesión actual.
Si tienes más de un registro que procesar, puedes incluir el script anterior
en un bucle.


Saludos,

Pedro López-Belmonte Eraso
MCAD, MCT.



"Marcelo Clavero" wrote:

Isaías, gracias por tu respuesta.

No tengo un scriptpensé que tal vez se pueda resolver con alguna
sentencia por lote, por ejemplo un INSERT INTO ... SELECT...(que no me
doy idea de como hacerlo).

Resolverlo con WHILE, recorriendo la tabla A en insertando en B y C, me
recuerda a mi vieja forma de programar. He leído por ahí que esto implica el
uso de Cursores en SQL y que no son muy eficaces. ¿ es cierto ?

En caso de que nadie me pueda indicar una sentencia por lote de datos,
aplicaré tu sugerencia de recorrer cada registro. Gracias de nuevo.


"Isaias" escribió en el mensaje
news:
> ¿Y como pretendes (o lo estas) haciendo?
>
> Digo, cual es la logica, yo utilizaria un script con un WHILE recorriendo
> la
> tabla A e insertando en la tabla B, una vez hecho esto, insertaria en la
> tabla C, asi, hasta terminar de recorrer el WHILE.
>
> ¿Cual es tu logica de inserccion? (tienes un script)
> Saludos
> IIslas
>
>
> "Marcelo Clavero" wrote:
>
>> Estimados:
>>
>> Tengo una tabla A, una B y una C.
>> A. Facturas Pendientes de Emisión (sin nro), llegan de una agencia.
>> B. Facturas definitivas
>> C. Detalle de las facturas.
>>
>> Debo volcar A en (B y C) y es en B donde se genera el nro. de factura.
>> El problema se me plantea para volcar en C, ya que debo poner el nro. de
>> factura que se generó en B, además de los campos de detalle que están en
>> A.
>>
>> Como ejemplo, pongo estructuras simplificadas.
>> => >> A. FAC_AGENCIA
>> - id_cliente
>> - monto
>> - detalle
>>
>> B. FACTURAS
>> - id_nro (identidad automática)
>> - id_cliente
>> - monto
>>
>> C. DETALLES
>> - id_nro
>> - detalle
>>
>> Desde ya Muchas Gracias.
>> Y saludos al foro.
>> Marcelo Clavero
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida