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

#1 Salvador Ramos
10/09/2004 - 11:57 | Informe spam
Hola:

En www.portalsql.com tienes un artículo muy interesante sobre el tema, con
código fuente, problemas y soluciones a este tipo de implementaciones.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

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


Respuesta Responder a este mensaje
#2 Jose Antonio
10/09/2004 - 14:08 | Informe spam
No lo consigo encontrar, ¿Sabes que articulo es?.

Gracias
"Salvador Ramos" escribió en el
mensaje news:%
Hola:

En www.portalsql.com tienes un artículo muy interesante sobre el tema, con
código fuente, problemas y soluciones a este tipo de implementaciones.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

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


Respuesta Responder a este mensaje
#3 Salvador Ramos
10/09/2004 - 15:51 | Informe spam
Pues lo he estado buscando y tampoco lo veo :-(
Pero estoy seguro de que he leído allí el artículo. A ver si Miguel Egea o
algún otro compañero puede indicar la URL exacta.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Jose Antonio" escribió en el mensaje
news:
No lo consigo encontrar, ¿Sabes que articulo es?.

Gracias
"Salvador Ramos" escribió en el
mensaje news:%
> Hola:
>
> En www.portalsql.com tienes un artículo muy interesante sobre el tema,


con
> código fuente, problemas y soluciones a este tipo de implementaciones.
>
> Un saludo
> Salvador Ramos
> Murcia - España
> [Microsoft MVP SQL Server]
> www.helpdna.net
> ¿Te interesa participar en las reuniones
> del grupo de Usuarios de SQL-Server y .NET
> Se harán en levante de España, (Alicante o Murcia)?
>
> "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.
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Jose Antonio
11/09/2004 - 18:26 | Informe spam
Creo que la unica solucion es utilizar un cursor.
¿Alguna idea de los anti-cursores?


"Salvador Ramos" escribió en el
mensaje news:
Pues lo he estado buscando y tampoco lo veo :-(
Pero estoy seguro de que he leído allí el artículo. A ver si Miguel Egea o
algún otro compañero puede indicar la URL exacta.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Jose Antonio" escribió en el mensaje
news:
> No lo consigo encontrar, ¿Sabes que articulo es?.
>
> Gracias
> "Salvador Ramos" escribió en el
> mensaje news:%
> > Hola:
> >
> > En www.portalsql.com tienes un artículo muy interesante sobre el tema,
con
> > código fuente, problemas y soluciones a este tipo de implementaciones.
> >
> > Un saludo
> > Salvador Ramos
> > Murcia - España
> > [Microsoft MVP SQL Server]
> > www.helpdna.net
> > ¿Te interesa participar en las reuniones
> > del grupo de Usuarios de SQL-Server y .NET
> > Se harán en levante de España, (Alicante o Murcia)?
> >
> > "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.
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Liliana Sorrentino
13/09/2004 - 15:40 | Informe spam
Hola,
Parece que Miguel no ha visto este guante lanzado, así que me permito
responderte con algo basado en lo que posteó hace un tiempo.
Espero que te sirva,
Liliana.

CREATE TABLE #test
(Clave char(10),
Identy smallint null)

INSERT #test SELECT 'Rojo', null
INSERT #test SELECT 'Rojo', null
INSERT #test SELECT 'Rojo', null
INSERT #test SELECT 'Azul', null
INSERT #test SELECT 'Azul', null
INSERT #test SELECT 'Verde', null
INSERT #test SELECT 'Verde', null
INSERT #test SELECT 'Verde', null
GO

CREATE INDEX #test_index on #test (clave)
GO

SELECT * FROM #test

DECLARE @identy int SET @identy=1
DECLARE @clave char(10)
UPDATE t
SET @identy= CASE @clave WHEN clave THEN @identy +1 ELSE 1 END,
@clave = clave, Identy = @identy
FROM #test t (INDEX = #test_index)

SELECT * FROM #test

"Jose Antonio" escribió en el mensaje
news:
Creo que la unica solucion es utilizar un cursor.
¿Alguna idea de los anti-cursores?


"Salvador Ramos" escribió en el
mensaje news:
> Pues lo he estado buscando y tampoco lo veo :-(
> Pero estoy seguro de que he leído allí el artículo. A ver si Miguel Egea


o
> algún otro compañero puede indicar la URL exacta.
>
> Un saludo
> Salvador Ramos
> Murcia - España
> [Microsoft MVP SQL Server]
> www.helpdna.net
> ¿Te interesa participar en las reuniones
> del grupo de Usuarios de SQL-Server y .NET
> Se harán en levante de España, (Alicante o Murcia)?
>
> "Jose Antonio" escribió en el mensaje
> news:
> > No lo consigo encontrar, ¿Sabes que articulo es?.
> >
> > Gracias
> > "Salvador Ramos" escribió en el
> > mensaje news:%
> > > Hola:
> > >
> > > En www.portalsql.com tienes un artículo muy interesante sobre el


tema,
> con
> > > código fuente, problemas y soluciones a este tipo de


implementaciones.
> > >
> > > Un saludo
> > > Salvador Ramos
> > > Murcia - España
> > > [Microsoft MVP SQL Server]
> > > www.helpdna.net
> > > ¿Te interesa participar en las reuniones
> > > del grupo de Usuarios de SQL-Server y .NET
> > > Se harán en levante de España, (Alicante o Murcia)?
> > >
> > > "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.
> > > >
> > > >
> > >
> > >
> >
> >
>
>


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