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

#6 Miguel Egea
25/07/2006 - 23:50 | Informe spam
obviamente esta respuesta no era para esta pregunta :/
"Miguel Egea" wrote in message
news:
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
#7 Isaias
26/07/2006 - 00:15 | Informe spam
No Marcelo, sin cursores, es RECORRER la tabla A, para esto, debes guardar la
referencia (dentro del WHILE) que registro estas procesando.

Saludos
IIslas


"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
#8 Isaias
26/07/2006 - 00:16 | Informe spam
Peter

En todo caso, no seria con @@IDENTITY, si con SCOPE_IDENTITY, tal cual lo
recomienda Miguel Egea.
Saludos
IIslas


"Peter" wrote:

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
#9 Marcelo Clavero
26/07/2006 - 00:59 | Informe spam
Muchas gracias a todos.
Me ha sido muy util.

"Isaias" escribió en el mensaje
news:
No Marcelo, sin cursores, es RECORRER la tabla A, para esto, debes guardar
la
referencia (dentro del WHILE) que registro estas procesando.

Saludos
IIslas


"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
#10 Pedro López-Belmonte
26/07/2006 - 17:26 | Informe spam
Isaias,

Estoy de acuerdo en que resulta más adecuado utilizar SCOPE_IDENTITY que la
variable @@IDENTITY, teniendo en cuenta que las tablas pueden tener triggers
asociados. En todo caso, en el escenario que planteo, las dos devolverían el
mismo valor.


Saludos,
Pedro López-Belmonte Eraso
MCAD, MCT
(quitaestoparaenviar)


"Isaias" wrote:

Peter

En todo caso, no seria con @@IDENTITY, si con SCOPE_IDENTITY, tal cual lo
recomienda Miguel Egea.
Saludos
IIslas


"Peter" wrote:

> 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
> > >>
> > >>
> > >>
> >
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida