ID AUTOMATICO CON UN INSERT

24/06/2004 - 19:33 por Jose Manuel Davila | Informe spam
que tal foro buen dia:

una pregunta aver su se puede

insert into tabla1(id, campo1, campo2)
select ("que me de el id maximo mas uno, para cada, fila insertada",
campo1, campo2
from tabla1
where campo1 = 1


osea :

que pueda consultar tabla1 si son 5 reg. el resultado,

que los pueda insertar en esa misma tabla pero al final y que el query me de
el consecurivo siguiente para pada registro.

no se si se pueda hacer esto



gracias

un saludos para todos

Preguntas similare

Leer las respuestas

#6 ulises
25/06/2004 - 21:27 | Informe spam
Maxi, de acuerdo contigo en que es mejor todo trabajarlo
con un solo insert y con mayor razón cuando hay varias
fuentes de ingreso a la tabla, ahora esta actualización
masiva de la misma tabla no me la imagino más que en una
situación de un proceso batch, pero en todo caso para
evitarnos problemas podriamos usar un CROSS JOIN con el
máximo de la misma tabla (ya que el MAX al ser una funcíón
de agregación no puede ser usado en forma conjunta con los
campos simples de la tabla) podriamos hacer :

insert into tabla
select a.serie + b.contador , a.campo1, a.campo2
from tabla a cross join ( select count(*) as contador from
tabla ) b

Saludos,
Ulises

Ulises, que pasaria si entre el Selecy y el Insert


alguien mete un registro?
creo que no funcionaria tu codigo ;-)

Haz la prueba, por un Delay entre la asignacion de la


variable y el insert y
veras lo que digo ;*)

lo mejor seria hacerlo dentro de una sola transaccion


como es el Insert


Salu2
-


-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-


-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Jose Manuel Davila" escribió


en el mensaje
news:eCgl%
que va ulises funciona y bien, pero aqui cual es la




expli. logica, no me
quiero quedar ocn que si lo hace sino como lo hace.

han de pensar que es mucho pero prefiero tener bien




entendido, antes de
aplicarlo

gracias

saludos para todos

Jose Manuel Davila



"ulises" escribió en




el mensaje
news:2133301c45a3b$a4c8f460$
Dada tu tabla :

create table tabla ( serie int,
campo1 char(1),
campo2 char(1) )
insert into tabla values ( 1, 'A','X' )
insert into tabla values ( 2, 'B','Z' )
insert into tabla values ( 3, 'B','Z' )

con las sentencias :

declare @secuencia int
select @secuencia = isnull(max(serie),0) from tabla
insert into tabla
select serie + @secuencia, campo1, campo2 from tabla

obtienes :

serie campo1 campo2
1 A X
2 B Z
3 B Z
4 A X
5 B Z
6 B Z

(6 row(s) affected)

¿es eso lo que buscas?

Saludos,
Ulises

>que tal foro buen dia:
>
>una pregunta aver su se puede
>
>insert into tabla1(id, campo1, campo2)
> select ("que me de el id maximo mas uno, para cada,
fila insertada",
>campo1, campo2
> from tabla1
> where campo1 = 1
>
>
>osea :
>
>que pueda consultar tabla1 si son 5 reg. el resultado,
>
>que los pueda insertar en esa misma tabla pero al




final y
que el query me de
>el consecurivo siguiente para pada registro.
>
>no se si se pueda hacer esto
>
>
>
>gracias
>
>un saludos para todos
>
>
>.
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.707 / Virus Database: 463 - Release Date:


15/06/2004


.

Respuesta Responder a este mensaje
#7 Jose Manuel Davila
25/06/2004 - 21:39 | Informe spam
Ulises: mas bien seria asi

insert into tabla
select A.SERIE + b.contador , a.campo1, a.campo2
from tabla a cross join ( select max(serie) as contador from
tabla ) b

porque asi me inserta varias veces el contenido que queiro insertar

insert into tabla
select a.serie + b.contador , a.campo1, a.campo2
from tabla a cross join ( select count(*) as contador from
tabla ) b


"ulises" escribió en el mensaje
news:21ce301c45aea$726bc8d0$
Maxi, de acuerdo contigo en que es mejor todo trabajarlo
con un solo insert y con mayor razón cuando hay varias
fuentes de ingreso a la tabla, ahora esta actualización
masiva de la misma tabla no me la imagino más que en una
situación de un proceso batch, pero en todo caso para
evitarnos problemas podriamos usar un CROSS JOIN con el
máximo de la misma tabla (ya que el MAX al ser una funcíón
de agregación no puede ser usado en forma conjunta con los
campos simples de la tabla) podriamos hacer :

insert into tabla
select a.serie + b.contador , a.campo1, a.campo2
from tabla a cross join ( select count(*) as contador from
tabla ) b

Saludos,
Ulises

Ulises, que pasaria si entre el Selecy y el Insert


alguien mete un registro?
creo que no funcionaria tu codigo ;-)

Haz la prueba, por un Delay entre la asignacion de la


variable y el insert y
veras lo que digo ;*)

lo mejor seria hacerlo dentro de una sola transaccion


como es el Insert


Salu2
-


-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-


-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Jose Manuel Davila" escribió


en el mensaje
news:eCgl%
que va ulises funciona y bien, pero aqui cual es la




expli. logica, no me
quiero quedar ocn que si lo hace sino como lo hace.

han de pensar que es mucho pero prefiero tener bien




entendido, antes de
aplicarlo

gracias

saludos para todos

Jose Manuel Davila



"ulises" escribió en




el mensaje
news:2133301c45a3b$a4c8f460$
Dada tu tabla :

create table tabla ( serie int,
campo1 char(1),
campo2 char(1) )
insert into tabla values ( 1, 'A','X' )
insert into tabla values ( 2, 'B','Z' )
insert into tabla values ( 3, 'B','Z' )

con las sentencias :

declare @secuencia int
select @secuencia = isnull(max(serie),0) from tabla
insert into tabla
select serie + @secuencia, campo1, campo2 from tabla

obtienes :

serie campo1 campo2
1 A X
2 B Z
3 B Z
4 A X
5 B Z
6 B Z

(6 row(s) affected)

¿es eso lo que buscas?

Saludos,
Ulises

>que tal foro buen dia:
>
>una pregunta aver su se puede
>
>insert into tabla1(id, campo1, campo2)
> select ("que me de el id maximo mas uno, para cada,
fila insertada",
>campo1, campo2
> from tabla1
> where campo1 = 1
>
>
>osea :
>
>que pueda consultar tabla1 si son 5 reg. el resultado,
>
>que los pueda insertar en esa misma tabla pero al




final y
que el query me de
>el consecurivo siguiente para pada registro.
>
>no se si se pueda hacer esto
>
>
>
>gracias
>
>un saludos para todos
>
>
>.
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.707 / Virus Database: 463 - Release Date:


15/06/2004


.

Respuesta Responder a este mensaje
#8 ulises
25/06/2004 - 22:40 | Informe spam
:) de acuerdo, no necesariamente el count(*) será igual al
max, ... pero creo que ya captaste la idea ;).

Saludos,
Ulises

Ulises: mas bien seria asi

insert into tabla
select A.SERIE + b.contador , a.campo1, a.campo2
from tabla a cross join ( select max(serie) as contador


from
tabla ) b

porque asi me inserta varias veces el contenido que


queiro insertar

insert into tabla
select a.serie + b.contador , a.campo1, a.campo2
from tabla a cross join ( select count(*) as contador from
tabla ) b

Respuesta Responder a este mensaje
#9 Jose Manuel Davila
25/06/2004 - 23:55 | Informe spam
SI GRACIAS



"ulises" escribió en el mensaje
news:21d3601c45af4$98462370$
:) de acuerdo, no necesariamente el count(*) será igual al
max, ... pero creo que ya captaste la idea ;).

Saludos,
Ulises

Ulises: mas bien seria asi

insert into tabla
select A.SERIE + b.contador , a.campo1, a.campo2
from tabla a cross join ( select max(serie) as contador


from
tabla ) b

porque asi me inserta varias veces el contenido que


queiro insertar

insert into tabla
select a.serie + b.contador , a.campo1, a.campo2
from tabla a cross join ( select count(*) as contador from
tabla ) b

Respuesta Responder a este mensaje
#10 MAXI
26/06/2004 - 05:44 | Informe spam
Perdon, perdon!! no vi que estabas insertando un conjunto de datos, pense
que lo querias poner en un SP de CRUD para no usar identitys o cosas asi
:(((

Debo tomar mas seguido la pastilla azul :(

Suerte




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


"Jose Manuel Davila" escribió en el mensaje
news:
Maxi: Asi no Funciona, proque para el max necesitas un group by, au cuando
se lo pongas siempre te va a dar el mismo numero

saludos

"Maxi" escribió en el mensaje
news:
> Si se puede
>
> Asi
>
> Insert into tutabla (campos)
>
> Select max(campoid)+1,@campo2,@campo3 from tabla
>
> Suerte
>
>
> Salu2
> Maxi
> Buenos Aires - Argentina
> Desarrollador Microsoft 3 Estrellas .NET
> Nunca consideres el estudio como una obligación sino como
> una oportunidad para penetrar en el bello y maravillosos
> mundo del saber.
> - Albert Einstein
>
>
>
> "Jose Manuel Davila" escribió en el mensaje
> news:
> > que tal foro buen dia:
> >
> > una pregunta aver su se puede
> >
> > insert into tabla1(id, campo1, campo2)
> > select ("que me de el id maximo mas uno, para cada, fila


insertada",
> > campo1, campo2
> > from tabla1
> > where campo1 = 1
> >
> >
> > osea :
> >
> > que pueda consultar tabla1 si son 5 reg. el resultado,
> >
> > que los pueda insertar en esa misma tabla pero al final y que el query
me
> de
> > el consecurivo siguiente para pada registro.
> >
> > no se si se pueda hacer esto
> >
> >
> >
> > gracias
> >
> > un saludos para todos
> >
> >
>
>
>
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.707 / Virus Database: 463 - Release Date: 15/06/2004
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida