ayuda de algun experto en transact sql

16/08/2007 - 15:36 por Guillermo Villanueva | Informe spam
Buenas tardes, necesito desarrollar una función en mi base de datos.
Resulta que tengo códigos numéricos que teóricamente son secuenciales (NO
SON DE TIPO IDENTITY). pero en algunos casos se eliminan ciertos rangos
entonces me quedan cosas como:
fp_codigo
1
2
3
4
7
8
9
18
19
20
21
22
42
43
Necesito una función BuscarRango(x,desde,hasta) que me diga si es que hay
algún rango disponible de x o mas lugares, entonces la función me devolvería
verdadero si es que si hay y falso si no hay, y en caso de que sea verdadero
debería darme en desde, hasta el rango disponible, ejemplo
BuscarRango(1000,desde,hasta) --> falso
BuscarRango(5,desde,hasta) --> verdadero 10 17

Se como hacerlo en powerbuilder pero no tengo la menor idea de como hacerlo
en transact lo cual sería mucho mejor. Desde ya muchas gracias.

Guillermo

Preguntas similare

Leer las respuestas

#1 principiante
16/08/2007 - 16:12 | Informe spam
Antes que todo yo te preguntaría el propósito de la función. Digamos,
despues de tenerla, que vas a hacer con ella? Llenar esos rangos que te
faltan? porque si es esto ultimo, te puedes ahorrar tener que hacer esa
funcion, simplemente detectando al momento de agregar nuevos registros cual
es el proximo que esta disponible. Para eso basta con averiguar si existe
la secuencia antes de grabar para irla incrementando.


José TH


"Guillermo Villanueva" escribió en el
mensaje news:%23%
Buenas tardes, necesito desarrollar una función en mi base de datos.
Resulta que tengo códigos numéricos que teóricamente son secuenciales (NO
SON DE TIPO IDENTITY). pero en algunos casos se eliminan ciertos rangos
entonces me quedan cosas como:
fp_codigo
1
2
3
4
7
8
9
18
19
20
21
22
42
43
Necesito una función BuscarRango(x,desde,hasta) que me diga si es que hay
algún rango disponible de x o mas lugares, entonces la función me
devolvería verdadero si es que si hay y falso si no hay, y en caso de que
sea verdadero debería darme en desde, hasta el rango disponible, ejemplo
BuscarRango(1000,desde,hasta) --> falso
BuscarRango(5,desde,hasta) --> verdadero 10 17

Se como hacerlo en powerbuilder pero no tengo la menor idea de como
hacerlo en transact lo cual sería mucho mejor. Desde ya muchas gracias.

Guillermo

Respuesta Responder a este mensaje
#2 Guillermo Villanueva
16/08/2007 - 16:13 | Informe spam
Me respondo solo:
lo puedo hacer con una consulta de la siguiente manera:
select A.fp_codigo, MIN(B.fp_codigo )
from FacturasPad A inner join FacturasPad B
on A.fp_codigo < B.fp_codigo

GROUP BY A.fp_codigo
HAVING MIN(B.fp_codigo) - A.fp_codigo > 7

El problema es que es bastante lento para devolverme el resultado, no
importa.

"Guillermo Villanueva" escribió en el
mensaje news:%23%
Buenas tardes, necesito desarrollar una función en mi base de datos.
Resulta que tengo códigos numéricos que teóricamente son secuenciales (NO
SON DE TIPO IDENTITY). pero en algunos casos se eliminan ciertos rangos
entonces me quedan cosas como:
fp_codigo
1
2
3
4
7
8
9
18
19
20
21
22
42
43
Necesito una función BuscarRango(x,desde,hasta) que me diga si es que hay
algún rango disponible de x o mas lugares, entonces la función me
devolvería verdadero si es que si hay y falso si no hay, y en caso de que
sea verdadero debería darme en desde, hasta el rango disponible, ejemplo
BuscarRango(1000,desde,hasta) --> falso
BuscarRango(5,desde,hasta) --> verdadero 10 17

Se como hacerlo en powerbuilder pero no tengo la menor idea de como
hacerlo en transact lo cual sería mucho mejor. Desde ya muchas gracias.

Guillermo

Respuesta Responder a este mensaje
#3 Guillermo Villanueva
16/08/2007 - 16:19 | Informe spam
Buena respuesta, tambien es una alternativa, nada mas que mas lenta cuando
son muchas las filas que tengo que insertar , por cada fila tendría que
preguntar si está disponible o no. Mmmmm
"principiante" escribió en el mensaje
news:
Antes que todo yo te preguntaría el propósito de la función. Digamos,
despues de tenerla, que vas a hacer con ella? Llenar esos rangos que te
faltan? porque si es esto ultimo, te puedes ahorrar tener que hacer esa
funcion, simplemente detectando al momento de agregar nuevos registros
cual es el proximo que esta disponible. Para eso basta con averiguar si
existe la secuencia antes de grabar para irla incrementando.


José TH


"Guillermo Villanueva" escribió en el
mensaje news:%23%
Buenas tardes, necesito desarrollar una función en mi base de datos.
Resulta que tengo códigos numéricos que teóricamente son secuenciales (NO
SON DE TIPO IDENTITY). pero en algunos casos se eliminan ciertos rangos
entonces me quedan cosas como:
fp_codigo
1
2
3
4
7
8
9
18
19
20
21
22
42
43
Necesito una función BuscarRango(x,desde,hasta) que me diga si es que hay
algún rango disponible de x o mas lugares, entonces la función me
devolvería verdadero si es que si hay y falso si no hay, y en caso de que
sea verdadero debería darme en desde, hasta el rango disponible, ejemplo
BuscarRango(1000,desde,hasta) --> falso
BuscarRango(5,desde,hasta) --> verdadero 10 17

Se como hacerlo en powerbuilder pero no tengo la menor idea de como
hacerlo en transact lo cual sería mucho mejor. Desde ya muchas gracias.

Guillermo





Respuesta Responder a este mensaje
#4 principiante
16/08/2007 - 16:44 | Informe spam
Buena respuesta, tambien es una alternativa, nada mas que mas lenta cuando
son muchas las filas que tengo que insertar , por cada fila tendría que
preguntar si está disponible o no. Mmmmm




Sí pero podría ser sólo hasta que los rangos faltantes se te completen.
Luego puedes ajustar el procedimiento a que sólo lea el consecutivo próximo
y por supuesto tomando el control de que no te vuelvan a eliminar rangos a
menos que eso sea parte del funcionamiento normal de ese proceso, en cuyo
caso no estaría mal tampoco pensar en cambiar ese diseño.


Jose TH
Respuesta Responder a este mensaje
#5 Guillermo Villanueva
16/08/2007 - 16:55 | Informe spam
Si Jose, en realidad todo surgió por un mal diseño de la clave primaria.
Cometí el error de usar un código secuencial como PK en vez de formar la
clave por la combinación de claves foraneas.y nro de línea.

"principiante" escribió en el mensaje
news:
Buena respuesta, tambien es una alternativa, nada mas que mas lenta
cuando son muchas las filas que tengo que insertar , por cada fila
tendría que preguntar si está disponible o no. Mmmmm




Sí pero podría ser sólo hasta que los rangos faltantes se te completen.
Luego puedes ajustar el procedimiento a que sólo lea el consecutivo
próximo y por supuesto tomando el control de que no te vuelvan a eliminar
rangos a menos que eso sea parte del funcionamiento normal de ese proceso,
en cuyo caso no estaría mal tampoco pensar en cambiar ese diseño.


Jose TH



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