consulta por rangos en sql server

2,788 views
Skip to first unread message

victor velazquez

unread,
Sep 21, 2011, 1:07:48 PM9/21/11
to Comunidad de Visual Foxpro en Español
Una duda foxeros.. quiero extraer consultas por rango de registros

si deseo mostrar los 100 registros pues uso. select * top 100 from
mitabla

pero si quiero consultar digamos del registro 100 al 300 como seria..
saludos

Luis Mata

unread,
Sep 21, 2011, 1:14:52 PM9/21/11
to Comunidad de Visual Foxpro en Español
usa WHERE mas especificos
 


logo2 Mata Figueroa, Luis A.
Procesos, Tecnología de la Información y telecomunicaciones
TELF: (00 51 1) 617-4613
RPC : (00 51) 993597297
FAX : (00 51 1) 617-4601
lm...@cclf.com.pe
www.cclf.com.pe
imgfrm siguenos-fb

logo2[3].png
imgfrm[3].png
siguenos-fb[3].gif

Viktor Velazquez

unread,
Sep 21, 2011, 1:19:27 PM9/21/11
to publice...@googlegroups.com
si pero no tengo consecutivos.. creo aki no se maneja como las tablas de fox que lo manejas a nivel de registro recno()..


From: lm...@cclf.com.pe
To: publice...@googlegroups.com
Subject: Re: [vfp] consulta por rangos en sql server
Date: Wed, 21 Sep 2011 12:14:52 -0500
logo2[3].png
imgfrm[3].png
siguenos-fb[3].gif

Luis Mata

unread,
Sep 21, 2011, 1:21:57 PM9/21/11
to publice...@googlegroups.com
Bueno para sqlServer 2008 créate un campo tipo int (identity 1-1) que automáticamente de genera un campo autoincremental y solucionado el problema.
 


logo2 Mata Figueroa, Luis A.
Procesos, Tecnología de la Información y telecomunicaciones
TELF: (00 51 1) 617-4613
RPC : (00 51) 993597297
FAX : (00 51 1) 617-4601
lm...@cclf.com.pe
www.cclf.com.pe
imgfrm siguenos-fb

logo2[3].png
imgfrm[3].png
siguenos-fb[3].gif
logo2[3].png
imgfrm[3].png
siguenos-fb[3].gif

Viktor Velazquez

unread,
Sep 21, 2011, 1:51:41 PM9/21/11
to publice...@googlegroups.com
vientos... gracias luis. pro la idea... saludos


From: lm...@cclf.com.pe
To: publice...@googlegroups.com
Subject: Re: [vfp] consulta por rangos en sql server
Date: Wed, 21 Sep 2011 12:21:57 -0500
logo2[3].png
imgfrm[3].png
siguenos-fb[3].gif
logo2[3].png
imgfrm[3].png
siguenos-fb[3].gif

extremo

unread,
Sep 21, 2011, 2:27:02 PM9/21/11
to Comunidad de Visual Foxpro en Español
Luis

No funciona colocando un campo identity para esta situacion porque
este campo hace saltos en la cuenta ejemplo

valor inicial 0
insertar campo: valor 1
insertar campo: valor 2
insertar campo: valor 3
insertar campo: valor 4 ...... se hace rollback por falla, se elimina
el registro
insertar campo: valor 5

entonces tendriamos en la base de datos los siguientes valores:
1
2
3
5

Lo que intentan hacer yo aun no he dado con una solucion

Bendiciones






On 21 sep, 13:51, Viktor Velazquez <vive...@hotmail.com> wrote:
> vientos... gracias luis. pro la idea... saludos
>
> From: lm...@cclf.com.pe
> To: publice...@googlegroups.com
> Subject: Re: [vfp] consulta por rangos en sql server
> Date: Wed, 21 Sep 2011 12:21:57 -0500
>
> Bueno para sqlServer 2008 créate un campo tipo int (identity 1-1) que
> automáticamente de genera un campo autoincremental y solucionado el
> problema.
>
>     Mata Figueroa, Luis A.
> Procesos,
>       Tecnología de la Información y telecomunicaciones
> TELF: (00 51 1)
>       617-4613
> RPC : (00 51) 993597297
> FAX : (00 51 1) 617-4601
> lm...@cclf.com.pewww.cclf.com.pe
>
> From: Viktor Velazquez
> Sent: Wednesday, September 21, 2011 12:19 PM
> To: publice...@googlegroups.com
>
> Subject: RE: [vfp] consulta por rangos en sql
> server
>
> si pero no tengo consecutivos.. creo aki no se maneja como las
> tablas de fox que lo manejas a nivel de registro recno()..
>
> From: lm...@cclf.com.pe
> To: publice...@googlegroups.com
> Subject: Re:
> [vfp] consulta por rangos en sql server
> Date: Wed, 21 Sep 2011 12:14:52
> -0500
>
> usa WHERE mas especificos
>
>     Mata Figueroa, Luis A.
> Procesos,
>       Tecnología de la Información y telecomunicaciones
> TELF: (00 51 1)
>       617-4613
> RPC : (00 51) 993597297
> FAX : (00 51 1) 617-4601
> lm...@cclf.com.pe
>
> www.cclf.com.pe
>
> From: victor velazquez
> Sent: Wednesday, September 21, 2011 12:07 PM
> To: Comunidad de Visual Foxpro en
> Español
> Subject: [vfp] consulta por rangos en sql server
>
> Una
> duda foxeros.. quiero extraer consultas por rango de registros
>
> si deseo
> mostrar los 100 registros pues uso. select * top 100 from
> mitabla
>
> pero
> si quiero consultar digamos del registro 100 al 300 como
> seria..
> saludos
>
>  logo2[3].png
> 16 KVerDescargar
>
>  imgfrm[3].png
> 59 KVerDescargar
>
>  siguenos-fb[3].gif
> 2 KVerDescargar
>
>  logo2[3].png
> 16 KVerDescargar
>
>  imgfrm[3].png
> 59 KVerDescargar
>
>  siguenos-fb[3].gif
> 2 KVerDescargar

ricardo peña

unread,
Sep 21, 2011, 2:52:09 PM9/21/11
to GRUPO-VFP GRUPO-VFP
En sql no existe la función recno().
 
Si a tu tabla se le pueden borrar registros, no queda otra
que definir un campo numérico ( puede ser int, bigint o numeric (12,0) )
y renumerarlo cada vez que se altera la tabla.  Puede ser muy pesado
dependiendo de la cantidad de registros.
 
Esto me da a entender que puede haber un problema de diseño.

Ricardo Luis Peña
Analista de Sistemas
BA - Argentina
011-15-4440-7378
 
> Date: Wed, 21 Sep 2011 10:07:48 -0700

> Subject: [vfp] consulta por rangos en sql server

Viktor Velazquez

unread,
Sep 21, 2011, 3:01:46 PM9/21/11
to publice...@googlegroups.com
tienes razon extremo.. aun cuando lo necesitaba para exportalo.. no le veo por donde.. y eso de reenumerar como me comentan en otro link es mas aun engorroso.. saludos

> Date: Wed, 21 Sep 2011 11:27:02 -0700
> Subject: [vfp] Re: consulta por rangos en sql server
> From: protech...@gmail.com
> To: publice...@googlegroups.com

Marco Plaza

unread,
Sep 21, 2011, 3:06:58 PM9/21/11
to Comunidad de Visual Foxpro en Español
Pero dependiendo de para que lo necesitas.. Si es algo eventual y
muy necesario simplemente haz un select a un cursor de vfp y de allí
haces tu consulta con recno().

Saludos.


On Sep 21, 3:01 pm, Viktor Velazquez <vive...@hotmail.com> wrote:
> tienes razon extremo.. aun cuando lo necesitaba para exportalo.. no le veo por donde.. y eso de reenumerar como me comentan en otro link es mas aun engorroso.. saludos
>
>
>
>
>
>
>
> > Date: Wed, 21 Sep 2011 11:27:02 -0700
> > Subject: [vfp] Re: consulta por rangos en sql server
> > From: protech.ven...@gmail.com> To:publice...@googlegroups.com

mpulla

unread,
Sep 21, 2011, 3:30:23 PM9/21/11
to Comunidad de Visual Foxpro en Español
Hola Victor.

Como dice Extremo los autonumericos no te ayudan, pensar a renumerar
no me parece recomendable.
Si tienes Sql Server 2005 o superior puedes usar las funciones de
rango como ROW_NUMBER(), tendrias que evaluar bien en desempeño de la
consuta.
otra casa seria el uso de where especificos como dice Luis Mata.

Si nos cuenta el objetivo del proceso puede ser que te podamos aportar
algo mas.

Saludos.
Mauricio

Marco Plaza

unread,
Sep 21, 2011, 3:41:12 PM9/21/11
to Comunidad de Visual Foxpro en Español
Usar row_number() será lo mismo que traer el resultado a un cursor y
usar recno(), la ventaja es que podría particionar en varias
secuencias el resultado... igual no le servirá si lo que desea es
obtener el registro 356000 al 357000 sin tener que recuperar toda la
tabla...

Saludos

Marco

Hugo C.

unread,
Sep 21, 2011, 4:18:40 PM9/21/11
to Comunidad de Visual Foxpro en Español
Checa estas opciones pero son
para SQL Server 2008 R2

http://msdn.microsoft.com/en-us/library/ms186734.aspx

Saludos.

mpulla

unread,
Sep 21, 2011, 5:25:28 PM9/21/11
to Comunidad de Visual Foxpro en Español
Hola Marco

Este es un ejemplo del link que recomienda Hugo y es a lo que me
refiero con el uso de ROW_NUMBER()

USE AdventureWorks2008R2;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;

Saludos.
Mauricio

Marco Plaza

unread,
Sep 21, 2011, 5:52:11 PM9/21/11
to Comunidad de Visual Foxpro en Español
Hola Mauricio.. si.. mira que Row_Number lo que hace es 'numerar el
set de resultados' ( igual al recno de un cursor de vfp ) Mira que en
el ejemplo se valen del set de resultados como le sugerí que hiciera
con un cursor de vfp.. no le va a servir para referirse a el numero de
columna antes de obtener el set.

Saludos

Marco

mpulla

unread,
Sep 21, 2011, 8:21:34 PM9/21/11
to Comunidad de Visual Foxpro en Español
Hola Marco..

En mi caso haria un SP le mando el rango inicial y final y me devueve
solo el resultado que necesito.
algo asi

Create procedure spC_OrdenesRango @tiIdInicial Int, @tiIdFinal Int
As
USE AdventureWorks2008R2;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN @tiIdInicial AND @tiIdFinal;

Si entendi bien el problema creo que seria la solución.

Saludos.
Mauricio

ricardo peña

unread,
Sep 21, 2011, 8:41:17 PM9/21/11
to GRUPO-VFP GRUPO-VFP
A ver si nos entendemos:
 
Si la tabla Sales.SalesOrderHeader le calculas el ROW_NUMBER por OrderDate
 
¿ Porqué el rango no lo haces por OrderDate y pasas como parámetros al
SP las fechas inicial y final ?
 
¿ No sería lo mismo indexar la tabla por OrderDate y pedirle un rango de fechas ?
 
Algo así:
 
 SELECT SalesOrderID, OrderDate FROM Sales.SalesOrderHeader
           WHERE OrderDate BETWEEN @dFecInicial AND @dFecFinal
           ORDER BY OrderDate

Marco Plaza

unread,
Sep 21, 2011, 8:43:27 PM9/21/11
to Comunidad de Visual Foxpro en Español
Bueno.. si.. esa sirve pero mira si no es el equivalente de:

SELECT SalesOrderID, OrderDate,
FROM Sales.SalesOrderHeader ORDER BY OrderDate INTO CURSOR XX

Luego en vfp con el cursor:

SELECT *,RECNO() as RowNumber from xx where BETWEEN(recno(),
tiIdInicial , tiIdFinal )

Hay un punto: si necesitamos recuperar el resultado una vez, uso el SP
( no me traigo toda la tabla ) pero si necesito paginar preferiré el
cursor local.

de hecho me interesó el asunto porque implementaré un servicio web que
recupera páginas de la consulta.. y necesita esa técnica.. ( en ado
puedes definir algo así como paginas , tamaño de la pagina y recuperar
la pagina 8 por ejemplo )..

Marco

Luis Mata

unread,
Sep 21, 2011, 9:27:33 PM9/21/11
to Comunidad de Visual Foxpro en Español
Bien extra�a tu consulta SQL, quieres saber que registro se inserto uno
despues de otro?
y lo quieres hacer con un ID?
si lo que quieres saber el orden cronologico de las inserciones no hay nada
major que el datetime donde tienes hasta el milisegundo y no falla.
y encima puedes usar �nomcmpo datetime default getdate() not null�
con eso no deberia de escaparse nada, ya que el mismo server se encarga de
inserter las fechas y el date() de VFP en los cliente ya no juegan.

Luis

Bendiciones

> Bueno para sqlServer 2008 cr�ate un campo tipo int (identity 1-1) que
> autom�ticamente de genera un campo autoincremental y solucionado el


> problema.
>
> Mata Figueroa, Luis A.
> Procesos,

> Tecnolog�a de la Informaci�n y telecomunicaciones


> TELF: (00 51 1)
> 617-4613
> RPC : (00 51) 993597297
> FAX : (00 51 1) 617-4601
> lm...@cclf.com.pewww.cclf.com.pe
>
> From: Viktor Velazquez
> Sent: Wednesday, September 21, 2011 12:19 PM
> To: publice...@googlegroups.com
>
> Subject: RE: [vfp] consulta por rangos en sql
> server
>
> si pero no tengo consecutivos.. creo aki no se maneja como las
> tablas de fox que lo manejas a nivel de registro recno()..
>
> From: lm...@cclf.com.pe
> To: publice...@googlegroups.com
> Subject: Re:
> [vfp] consulta por rangos en sql server
> Date: Wed, 21 Sep 2011 12:14:52
> -0500
>
> usa WHERE mas especificos
>
> Mata Figueroa, Luis A.
> Procesos,

> Tecnolog�a de la Informaci�n y telecomunicaciones

mpulla

unread,
Sep 22, 2011, 12:55:11 AM9/22/11
to Comunidad de Visual Foxpro en Español
Hola Ricardo.

Con respecto a tu pregunta supongamos que desde 1-1-2011 Al 31-01-2001
se emitieron 5000 ordendes

- Si queremos ver las 100 primeras top 100
- Pero como las necesidades de Victor son tener los registros desde
100 a la 300 sin traer toda la data que representaria aplicar un
rango de fechas, entonces hago uso del ROW_NUMBER() ahi esta la
diferencia.

Saludos.
Mauricio

Luis Mata

unread,
Sep 22, 2011, 1:15:01 AM9/22/11
to Comunidad de Visual Foxpro en Español
Seria bueno saber la necesidad, o que es lo que se trata de lograr.......

-----Original Message-----
From: mpulla
Sent: Wednesday, September 21, 2011 11:55 PM
To: Comunidad de Visual Foxpro en Espa�ol
Subject: [vfp] Re: consulta por rangos en sql server

Hola Ricardo.

Con respecto a tu pregunta supongamos que desde 1-1-2011 Al 31-01-2001
se emitieron 5000 ordendes

- Si queremos ver las 100 primeras top 100
- Pero como las necesidades de Victor son tener los registros desde
100 a la 300 sin traer toda la data que representaria aplicar un
rango de fechas, entonces hago uso del ROW_NUMBER() ahi esta la
diferencia.

Saludos.
Mauricio


On Sep 21, 7:41 pm, ricardo pe�a <r...@hotmail.com> wrote:
> A ver si nos entendemos:
>
> Si la tabla Sales.SalesOrderHeader le calculas el ROW_NUMBER por OrderDate
>

> � Porqu� el rango no lo haces por OrderDate y pasas como par�metros al


> SP las fechas inicial y final ?
>

> � No ser�a lo mismo indexar la tabla por OrderDate y pedirle un rango de
> fechas ?
>
> Algo as�:


>
> SELECT SalesOrderID, OrderDate FROM Sales.SalesOrderHeader
> WHERE OrderDate BETWEEN @dFecInicial AND @dFecFinal
> ORDER BY OrderDate
>

> Ricardo Luis Pe�a

Viktor Velazquez

unread,
Sep 22, 2011, 1:38:08 PM9/22/11
to publice...@googlegroups.com
si gracias mauricio, lo necesitaba para exportar tenia mis dudas ya que me estoy adentrando a sql2008.. y este viene con mas opciones en sql2000 pej.-. saludos

> Date: Wed, 21 Sep 2011 12:30:23 -0700

> Subject: [vfp] Re: consulta por rangos en sql server

Juan Carlos Cordero

unread,
Sep 26, 2011, 9:04:50 PM9/26/11
to publice...@googlegroups.com
Buenas tardes a todos..... tengo un par de preguntas que quizas me podrian ayudar a resolverlas.
1.- El timbre fiscal es obligatorio para los que ya manejamos los cfds o solamente para los cfdis?.
2.- Donde puedo encontrar información para agregar a nuestros cfds el timbre fiscal.?

Walter R. Ojeda Valiente

unread,
Sep 26, 2011, 10:02:06 PM9/26/11
to publice...@googlegroups.com
Supongo que cfds significa "colegas feos de Silvio" y cfdis significa "colegas feos del indio Silvio"

¿O acaso tiene otro significado?

¿Y debemos adivinarlo en un grupo donde hay personas de todos los países de América y de España?

En fin...

Saludos.

Walter.



From: juan...@hotmail.com
To: publice...@googlegroups.com
Subject: [vfp] Timbre Fiscal
Date: Tue, 27 Sep 2011 01:04:50 +0000

elkin dario uribe torres

unread,
Sep 27, 2011, 9:01:47 AM9/27/11
to publice...@googlegroups.com
Hola Walter creo que el se refiere a la facturacion electronica, Juan Carlos porque no vas a esta direccion del foro de facturacion electronica Mexicana y planteas la pregunta alli el link es este

https://groups.google.com/d/msg/vfp-factura-electronica-mexico/-/HkmO4B4he-4J.


Saludos


Elkin Uribe
Medellin - Colombia
Reply all
Reply to author
Forward
0 new messages