Corregir el excaso comportamiento de los identy.

10/09/2004 - 09:35 por Jose Antonio | Informe spam
En una tabla, necesito que se numeren automaticamente una serie de filas
dependiendo de una columna en concreto, me explico.

Tengo la columna CLAVE y la columna IDENTY.
La numeracion de IDENTY depende de la columna CLAVE de esta manera:

CLAVE IDENTY

Rojo 1
Rojo 2
Rojo 3
Azul 1
Azul 2
Verde 1
Verde 2
Verde 3

Como los identy de SQL Server no admiten este comportamiento, necesito
hacerlo manualmente de la forma

declare @max int
select @max=isnull(max(identy)+1,1) from tabla where clave='Rojo'
insert tabla values('Rojo',@max)

el problema surge cuando necesito realizar una insercion multiple que
proviene de un select, algo asi

insert tabla select clave,(aqui debiera de estar la instruccion de numerar
el identy) from otra tabla

no encuentro la forma de hacerlo.

¿Alguien se ha encontrado con este problema alguna vez?

Saludos y gracias.

Preguntas similare

Leer las respuestas

#16 MAXI
15/09/2004 - 05:14 | Informe spam
hola, ahora si :-),

Bien, aca tenemos algunas alternativas.

1) los valores que se pasen de una tabla a la otra marcarlos para que luego
no se vuelvan a pasar
2) borrar primero la tabla y siempre pasar todos los registros

La segunda opcion no me gusta mucho pero...

En la tabla ORIGINAL cual es el primery Key? contame un poco esto y vemos
como armamos el Script.

Pero de curioso nomas, porque poner los valores en una tabla con este tipo
de numeracion? cual es el objetivo de ello? me parece que es totalmente
inncesario hacerlo.





Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar
Msn Messager:

"Jose Antonio" escribió en el mensaje
news:
Tengo la columna CLAVE y la columna IDENTY en la tabla RESERVA
La numeracion de IDENTY depende de la columna CLAVE y clave+identy es la
pk de la tabla.

Tengo otra tabla ORIGINAL con las columnas CLAVE,FECHA,DONATIVO,ETC en la
que los usuarios insertan continuamente filas, esta tabla no necesito
numerarla.

Lo que necesito no es un query, sino insertar estos datos en la tabla
RESERVA, de manera que numere paticularmente por cada clave diferente.

Cuando el usuario lo desea ejecuta un proceso que selecciona todas las
claves de la tabla ORIGINAL, para insertarlas en la tabla RESERVA.

El resultado de este select que contiene varias filas es el que tengo que
insertar en la tabla RESERVA, pero que siga la numeracion correspondiente


a
cada clave en particular.

No se si me he explicado.

Saludos



"Maxi" escribió en el mensaje
news:%
> Hola, a ver: contame un poco porque buscas ese funcionamiento y si eso
debe
> ser un valor que debe quedar guardado en la tabla o bien lo podemos usar
> para una query, o sea: si es para una query lo unico que necesitamos es
> numerar y eso se puede hacer sin mayores problemas, si lo debes meter en
el
> ID de la tabla contame cual es el criterio de hacerlo asi, porque vas a
> tener valores repetidos a menos que uses como pk el identitie y el


codigo
de
> articulo
>
> Un abrazo
>
>
> 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 Antonio" escribió en el mensaje
> news:%
> > En una tabla, necesito que se numeren automaticamente una serie de


filas
> > dependiendo de una columna en concreto, me explico.
> >
> > Tengo la columna CLAVE y la columna IDENTY.
> > La numeracion de IDENTY depende de la columna CLAVE de esta manera:
> >
> > CLAVE IDENTY
> >
> > Rojo 1
> > Rojo 2
> > Rojo 3
> > Azul 1
> > Azul 2
> > Verde 1
> > Verde 2
> > Verde 3
> >
> > Como los identy de SQL Server no admiten este comportamiento, necesito
> > hacerlo manualmente de la forma
> >
> > declare @max int
> > select @max=isnull(max(identy)+1,1) from tabla where clave='Rojo'
> > insert tabla values('Rojo',@max)
> >
> > el problema surge cuando necesito realizar una insercion multiple que
> > proviene de un select, algo asi
> >
> > insert tabla select clave,(aqui debiera de estar la instruccion de
numerar
> > el identy) from otra tabla
> >
> > no encuentro la forma de hacerlo.
> >
> > ¿Alguien se ha encontrado con este problema alguna vez?
> >
> > Saludos y gracias.
> >
> >
>
>
>
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.748 / Virus Database: 500 - Release Date: 01/09/2004
>
>


Respuesta Responder a este mensaje
#17 Jose Antonio
15/09/2004 - 09:55 | Informe spam
Maxi, se que es un sistema extraño de almacenar las claves, he simplificado
las columnas de la tabla RESERVA para plantear el problema, pero tienen
bastantes columnas mas, aunque estas son solo informacion de relleno.

Las filas de la tabla ORIGINAL ya se marcan cuando se pasan a la de reserva
con una columna bool.

El hecho de numerarlas de esta manera es porque en un futuro necesitare que
de forma manual se pueda hacer lo siguiente, esto si fila a fila.

Si en la tabla reserva tengo:

Rojo 1
Rojo 2
Rojo 3
Rojo 4

en futuro puedo insertar en medio una que sea
Rojo 2,5
Rojo 3,7
Rojo 2,6

para que me quede

Rojo 1
Rojo 2
Rojo 2,5
Rojo 2,6
Rojo 3
Rojo 3,7
Rojo 4

para poder ordenar por la columna identy que es decimal.

El pk de original es un identity habitual, ya que ninguna de las columnas
puede ser unica y se pueden repetir todas, hay otros indices clave+fecha y
fecha.

Jose Antonio

"MAXI" escribió en el mensaje
news:
hola, ahora si :-),

Bien, aca tenemos algunas alternativas.

1) los valores que se pasen de una tabla a la otra marcarlos para que
luego
no se vuelvan a pasar
2) borrar primero la tabla y siempre pasar todos los registros

La segunda opcion no me gusta mucho pero...

En la tabla ORIGINAL cual es el primery Key? contame un poco esto y vemos
como armamos el Script.

Pero de curioso nomas, porque poner los valores en una tabla con este tipo
de numeracion? cual es el objetivo de ello? me parece que es totalmente
inncesario hacerlo.





Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar
Msn Messager:

"Jose Antonio" escribió en el mensaje
news:
Tengo la columna CLAVE y la columna IDENTY en la tabla RESERVA
La numeracion de IDENTY depende de la columna CLAVE y clave+identy es
la
pk de la tabla.

Tengo otra tabla ORIGINAL con las columnas CLAVE,FECHA,DONATIVO,ETC en la
que los usuarios insertan continuamente filas, esta tabla no necesito
numerarla.

Lo que necesito no es un query, sino insertar estos datos en la tabla
RESERVA, de manera que numere paticularmente por cada clave diferente.

Cuando el usuario lo desea ejecuta un proceso que selecciona todas las
claves de la tabla ORIGINAL, para insertarlas en la tabla RESERVA.

El resultado de este select que contiene varias filas es el que tengo que
insertar en la tabla RESERVA, pero que siga la numeracion correspondiente


a
cada clave en particular.

No se si me he explicado.

Saludos



"Maxi" escribió en el mensaje
news:%
> Hola, a ver: contame un poco porque buscas ese funcionamiento y si eso
debe
> ser un valor que debe quedar guardado en la tabla o bien lo podemos
> usar
> para una query, o sea: si es para una query lo unico que necesitamos es
> numerar y eso se puede hacer sin mayores problemas, si lo debes meter
> en
el
> ID de la tabla contame cual es el criterio de hacerlo asi, porque vas a
> tener valores repetidos a menos que uses como pk el identitie y el


codigo
de
> articulo
>
> Un abrazo
>
>
> 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 Antonio" escribió en el mensaje
> news:%
> > En una tabla, necesito que se numeren automaticamente una serie de


filas
> > dependiendo de una columna en concreto, me explico.
> >
> > Tengo la columna CLAVE y la columna IDENTY.
> > La numeracion de IDENTY depende de la columna CLAVE de esta manera:
> >
> > CLAVE IDENTY
> >
> > Rojo 1
> > Rojo 2
> > Rojo 3
> > Azul 1
> > Azul 2
> > Verde 1
> > Verde 2
> > Verde 3
> >
> > Como los identy de SQL Server no admiten este comportamiento,
> > necesito
> > hacerlo manualmente de la forma
> >
> > declare @max int
> > select @max=isnull(max(identy)+1,1) from tabla where clave='Rojo'
> > insert tabla values('Rojo',@max)
> >
> > el problema surge cuando necesito realizar una insercion multiple que
> > proviene de un select, algo asi
> >
> > insert tabla select clave,(aqui debiera de estar la instruccion de
numerar
> > el identy) from otra tabla
> >
> > no encuentro la forma de hacerlo.
> >
> > ¿Alguien se ha encontrado con este problema alguna vez?
> >
> > Saludos y gracias.
> >
> >
>
>
>
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.748 / Virus Database: 500 - Release Date: 01/09/2004
>
>






Respuesta Responder a este mensaje
#18 Maxi
15/09/2004 - 14:13 | Informe spam
MMM si el unico campo que tenemos en codigo y el 1 - 2 - 3 se pone por oden
de llegada y sin otro criterio, veo muy dificil de resolver el problema :( o
por lo menos no se me ocurre como :(

Pero la verdad que el sistema que estas armando de la forma que lo estas
haciendo es muy raro y no se cual es la funcionalidad final, me parece que
el gran problema es ese no.

No tenes opcion de cambiar cosas en el sistema?


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 Antonio" escribió en el mensaje
news:
Maxi, se que es un sistema extraño de almacenar las claves, he


simplificado
las columnas de la tabla RESERVA para plantear el problema, pero tienen
bastantes columnas mas, aunque estas son solo informacion de relleno.

Las filas de la tabla ORIGINAL ya se marcan cuando se pasan a la de


reserva
con una columna bool.

El hecho de numerarlas de esta manera es porque en un futuro necesitare


que
de forma manual se pueda hacer lo siguiente, esto si fila a fila.

Si en la tabla reserva tengo:

Rojo 1
Rojo 2
Rojo 3
Rojo 4

en futuro puedo insertar en medio una que sea
Rojo 2,5
Rojo 3,7
Rojo 2,6

para que me quede

Rojo 1
Rojo 2
Rojo 2,5
Rojo 2,6
Rojo 3
Rojo 3,7
Rojo 4

para poder ordenar por la columna identy que es decimal.

El pk de original es un identity habitual, ya que ninguna de las columnas
puede ser unica y se pueden repetir todas, hay otros indices clave+fecha y
fecha.

Jose Antonio

"MAXI" escribió en el mensaje
news:
> hola, ahora si :-),
>
> Bien, aca tenemos algunas alternativas.
>
> 1) los valores que se pasen de una tabla a la otra marcarlos para que
> luego
> no se vuelvan a pasar
> 2) borrar primero la tabla y siempre pasar todos los registros
>
> La segunda opcion no me gusta mucho pero...
>
> En la tabla ORIGINAL cual es el primery Key? contame un poco esto y


vemos
> como armamos el Script.
>
> Pero de curioso nomas, porque poner los valores en una tabla con este


tipo
> de numeracion? cual es el objetivo de ello? me parece que es totalmente
> inncesario hacerlo.
>
>
>
>
>
> Maxi
>
> Buenos Aires - Argentina
> Desarrollador .NET 3 Estrellas
> Microsoft User Group (MUG)
> Mail: Maxi_accotto[arroba]speedy.com.ar
> Msn Messager:
>
> "Jose Antonio" escribió en el mensaje
> news:
>> Tengo la columna CLAVE y la columna IDENTY en la tabla RESERVA
>> La numeracion de IDENTY depende de la columna CLAVE y clave+identy es
>> la
>> pk de la tabla.
>>
>> Tengo otra tabla ORIGINAL con las columnas CLAVE,FECHA,DONATIVO,ETC en


la
>> que los usuarios insertan continuamente filas, esta tabla no necesito
>> numerarla.
>>
>> Lo que necesito no es un query, sino insertar estos datos en la tabla
>> RESERVA, de manera que numere paticularmente por cada clave diferente.
>>
>> Cuando el usuario lo desea ejecuta un proceso que selecciona todas las
>> claves de la tabla ORIGINAL, para insertarlas en la tabla RESERVA.
>>
>> El resultado de este select que contiene varias filas es el que tengo


que
>> insertar en la tabla RESERVA, pero que siga la numeracion


correspondiente
> a
>> cada clave en particular.
>>
>> No se si me he explicado.
>>
>> Saludos
>>
>>
>>
>> "Maxi" escribió en el mensaje
>> news:%
>> > Hola, a ver: contame un poco porque buscas ese funcionamiento y si


eso
>> debe
>> > ser un valor que debe quedar guardado en la tabla o bien lo podemos
>> > usar
>> > para una query, o sea: si es para una query lo unico que necesitamos


es
>> > numerar y eso se puede hacer sin mayores problemas, si lo debes meter
>> > en
>> el
>> > ID de la tabla contame cual es el criterio de hacerlo asi, porque vas


a
>> > tener valores repetidos a menos que uses como pk el identitie y el
> codigo
>> de
>> > articulo
>> >
>> > Un abrazo
>> >
>> >
>> > 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 Antonio" escribió en el mensaje
>> > news:%
>> > > En una tabla, necesito que se numeren automaticamente una serie de
> filas
>> > > dependiendo de una columna en concreto, me explico.
>> > >
>> > > Tengo la columna CLAVE y la columna IDENTY.
>> > > La numeracion de IDENTY depende de la columna CLAVE de esta manera:
>> > >
>> > > CLAVE IDENTY
>> > >
>> > > Rojo 1
>> > > Rojo 2
>> > > Rojo 3
>> > > Azul 1
>> > > Azul 2
>> > > Verde 1
>> > > Verde 2
>> > > Verde 3
>> > >
>> > > Como los identy de SQL Server no admiten este comportamiento,
>> > > necesito
>> > > hacerlo manualmente de la forma
>> > >
>> > > declare @max int
>> > > select @max=isnull(max(identy)+1,1) from tabla where clave='Rojo'
>> > > insert tabla values('Rojo',@max)
>> > >
>> > > el problema surge cuando necesito realizar una insercion multiple


que
>> > > proviene de un select, algo asi
>> > >
>> > > insert tabla select clave,(aqui debiera de estar la instruccion de
>> numerar
>> > > el identy) from otra tabla
>> > >
>> > > no encuentro la forma de hacerlo.
>> > >
>> > > ¿Alguien se ha encontrado con este problema alguna vez?
>> > >
>> > > Saludos y gracias.
>> > >
>> > >
>> >
>> >
>> >
>> > Outgoing mail is certified Virus Free.
>> > Checked by AVG anti-virus system (http://www.grisoft.com).
>> > Version: 6.0.748 / Virus Database: 500 - Release Date: 01/09/2004
>> >
>> >
>>
>>
>
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.748 / Virus Database: 500 - Release Date: 01/09/2004
Respuesta Responder a este mensaje
#19 Liliana Sorrentino
15/09/2004 - 15:03 | Informe spam
Hola José Antonio,
En tu lugar, revería la respuesta del 13/09 a las 10:40, y como te comenté
posteriormente, solo habría que hacer una pequeña modificación para no
renumerar TODAS las filas, sino las de la última inserción.
Liliana.

"Jose Antonio" escribió en el mensaje
news:
Maxi, se que es un sistema extraño de almacenar las claves, he


simplificado
las columnas de la tabla RESERVA para plantear el problema, pero tienen
bastantes columnas mas, aunque estas son solo informacion de relleno.

Las filas de la tabla ORIGINAL ya se marcan cuando se pasan a la de


reserva
con una columna bool.

El hecho de numerarlas de esta manera es porque en un futuro necesitare


que
de forma manual se pueda hacer lo siguiente, esto si fila a fila.

Si en la tabla reserva tengo:

Rojo 1
Rojo 2
Rojo 3
Rojo 4

en futuro puedo insertar en medio una que sea
Rojo 2,5
Rojo 3,7
Rojo 2,6

para que me quede

Rojo 1
Rojo 2
Rojo 2,5
Rojo 2,6
Rojo 3
Rojo 3,7
Rojo 4

para poder ordenar por la columna identy que es decimal.

El pk de original es un identity habitual, ya que ninguna de las columnas
puede ser unica y se pueden repetir todas, hay otros indices clave+fecha y
fecha.

Jose Antonio

"MAXI" escribió en el mensaje
news:
> hola, ahora si :-),
>
> Bien, aca tenemos algunas alternativas.
>
> 1) los valores que se pasen de una tabla a la otra marcarlos para que
> luego
> no se vuelvan a pasar
> 2) borrar primero la tabla y siempre pasar todos los registros
>
> La segunda opcion no me gusta mucho pero...
>
> En la tabla ORIGINAL cual es el primery Key? contame un poco esto y


vemos
> como armamos el Script.
>
> Pero de curioso nomas, porque poner los valores en una tabla con este


tipo
> de numeracion? cual es el objetivo de ello? me parece que es totalmente
> inncesario hacerlo.
>
>
>
>
>
> Maxi
>
> Buenos Aires - Argentina
> Desarrollador .NET 3 Estrellas
> Microsoft User Group (MUG)
> Mail: Maxi_accotto[arroba]speedy.com.ar
> Msn Messager:
>
> "Jose Antonio" escribió en el mensaje
> news:
>> Tengo la columna CLAVE y la columna IDENTY en la tabla RESERVA
>> La numeracion de IDENTY depende de la columna CLAVE y clave+identy es
>> la
>> pk de la tabla.
>>
>> Tengo otra tabla ORIGINAL con las columnas CLAVE,FECHA,DONATIVO,ETC en


la
>> que los usuarios insertan continuamente filas, esta tabla no necesito
>> numerarla.
>>
>> Lo que necesito no es un query, sino insertar estos datos en la tabla
>> RESERVA, de manera que numere paticularmente por cada clave diferente.
>>
>> Cuando el usuario lo desea ejecuta un proceso que selecciona todas las
>> claves de la tabla ORIGINAL, para insertarlas en la tabla RESERVA.
>>
>> El resultado de este select que contiene varias filas es el que tengo


que
>> insertar en la tabla RESERVA, pero que siga la numeracion


correspondiente
> a
>> cada clave en particular.
>>
>> No se si me he explicado.
>>
>> Saludos
>>
>>
>>
>> "Maxi" escribió en el mensaje
>> news:%
>> > Hola, a ver: contame un poco porque buscas ese funcionamiento y si


eso
>> debe
>> > ser un valor que debe quedar guardado en la tabla o bien lo podemos
>> > usar
>> > para una query, o sea: si es para una query lo unico que necesitamos


es
>> > numerar y eso se puede hacer sin mayores problemas, si lo debes meter
>> > en
>> el
>> > ID de la tabla contame cual es el criterio de hacerlo asi, porque vas


a
>> > tener valores repetidos a menos que uses como pk el identitie y el
> codigo
>> de
>> > articulo
>> >
>> > Un abrazo
>> >
>> >
>> > 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 Antonio" escribió en el mensaje
>> > news:%
>> > > En una tabla, necesito que se numeren automaticamente una serie de
> filas
>> > > dependiendo de una columna en concreto, me explico.
>> > >
>> > > Tengo la columna CLAVE y la columna IDENTY.
>> > > La numeracion de IDENTY depende de la columna CLAVE de esta manera:
>> > >
>> > > CLAVE IDENTY
>> > >
>> > > Rojo 1
>> > > Rojo 2
>> > > Rojo 3
>> > > Azul 1
>> > > Azul 2
>> > > Verde 1
>> > > Verde 2
>> > > Verde 3
>> > >
>> > > Como los identy de SQL Server no admiten este comportamiento,
>> > > necesito
>> > > hacerlo manualmente de la forma
>> > >
>> > > declare @max int
>> > > select @max=isnull(max(identy)+1,1) from tabla where clave='Rojo'
>> > > insert tabla values('Rojo',@max)
>> > >
>> > > el problema surge cuando necesito realizar una insercion multiple


que
>> > > proviene de un select, algo asi
>> > >
>> > > insert tabla select clave,(aqui debiera de estar la instruccion de
>> numerar
>> > > el identy) from otra tabla
>> > >
>> > > no encuentro la forma de hacerlo.
>> > >
>> > > ¿Alguien se ha encontrado con este problema alguna vez?
>> > >
>> > > Saludos y gracias.
>> > >
>> > >
>> >
>> >
>> >
>> > Outgoing mail is certified Virus Free.
>> > Checked by AVG anti-virus system (http://www.grisoft.com).
>> > Version: 6.0.748 / Virus Database: 500 - Release Date: 01/09/2004
>> >
>> >
>>
>>
>
>


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