primeros n valores del resultado de una consulta (donde n es dinamico) uso Top ?

21/08/2004 - 00:31 por Rodrigo Ibaraki | Informe spam
Hola señores

Me he topado con el siguiente caso en el que necesito ayuda:

Requiero que del resultado de una consulta los primeros N valores (no un
numero fijo)
es decir algo como lo siguiente

declare @exedentes as int
set @exedentes = 5
select top @excedentes fechahora
from ventas

ese ejemplo me genera un error, como digo mediante variable que el valor del
top ?

Gracias de Antemano

RIP

Preguntas similare

Leer las respuestas

#1 Rodrigo Ibaraki
21/08/2004 - 01:55 | Informe spam
ok gracias ni modo ... concatenando es la otra opcion aunque da que pensar
al respecto :)


"MAXI" wrote in message
news:
Hola, en sql2k no lo podes hacer :(, como opcion te queda usar SQLDinamico


o
usar SET ROWCOUNT de la siguiente manera:

DECLARE @N INT
SET @N = 4

set ROWCOUNT @N

pd: claro que debes sacar el top no y luego de terminar el query poner el
SET en 0 porque sino vas a estar en problemas :(

Suerte y espero te sea util




Maxi

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

"Rodrigo Ibaraki" escribió en el mensaje
news:
> Hola señores
>
> Me he topado con el siguiente caso en el que necesito ayuda:
>
> Requiero que del resultado de una consulta los primeros N valores (no un
> numero fijo)
> es decir algo como lo siguiente
>
> declare @exedentes as int
> set @exedentes = 5
> select top @excedentes fechahora
> from ventas
>
> ese ejemplo me genera un error, como digo mediante variable que el valor
del
> top ?
>
> Gracias de Antemano
>
> RIP
>
>


Respuesta Responder a este mensaje
#2 MAXI
21/08/2004 - 23:07 | Informe spam
Hola, en sql2k no lo podes hacer :(, como opcion te queda usar SQLDinamico o
usar SET ROWCOUNT de la siguiente manera:

DECLARE @N INT
SET @N = 4

set ROWCOUNT @N

pd: claro que debes sacar el top no y luego de terminar el query poner el
SET en 0 porque sino vas a estar en problemas :(

Suerte y espero te sea util




Maxi

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

"Rodrigo Ibaraki" escribió en el mensaje
news:
Hola señores

Me he topado con el siguiente caso en el que necesito ayuda:

Requiero que del resultado de una consulta los primeros N valores (no un
numero fijo)
es decir algo como lo siguiente

declare @exedentes as int
set @exedentes = 5
select top @excedentes fechahora
from ventas

ese ejemplo me genera un error, como digo mediante variable que el valor


del
top ?

Gracias de Antemano

RIP


Respuesta Responder a este mensaje
#3 Cesar Toledo
23/08/2004 - 17:08 | Informe spam
Otra forma de hacerlo es:

1. creas una tabla temporal
2. la llenas con el top ilimitado
3. luego borras aquellas filas que el ranking sea mas bajo que el parametro
@n que tu tienes
4. listas la tabla

saludos

"Rodrigo Ibaraki" escribió en el mensaje
news:eS$
ok gracias ni modo ... concatenando es la otra opcion aunque da que pensar
al respecto :)
> del
> > top ?
> >
> > Gracias de Antemano
> >
> > RIP
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Maxi
23/08/2004 - 17:27 | Informe spam
Hola, es verdad que es otra forma, pero no soy muy partidiario del uso de
tablas temporales, y en este caso en particular me parece que el uso de una
tabla temporal no se justifica.

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



"Cesar Toledo" escribió en el mensaje
news:
Otra forma de hacerlo es:

1. creas una tabla temporal
2. la llenas con el top ilimitado
3. luego borras aquellas filas que el ranking sea mas bajo que el


parametro
@n que tu tienes
4. listas la tabla

saludos

"Rodrigo Ibaraki" escribió en el mensaje
news:eS$
> ok gracias ni modo ... concatenando es la otra opcion aunque da que


pensar
> al respecto :)
> > del
> > > top ?
> > >
> > > Gracias de Antemano
> > >
> > > RIP
> > >
> > >
> >
> >
>
>







Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date: 16/08/2004
Respuesta Responder a este mensaje
#5 Miguel Egea
30/08/2004 - 20:05 | Informe spam
Solo por poner un pero, set rowcount advierte en los libros en pantalla que
puede ser descontinuado



-
Miguel Egea Gómez
Microsoft SQL-Server MVP
Webmaster de PortalSql.Com
¿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)?

"Maxi" escribió en el mensaje
news:%
Hola, es verdad que es otra forma, pero no soy muy partidiario del uso de
tablas temporales, y en este caso en particular me parece que el uso de


una
tabla temporal no se justifica.

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



"Cesar Toledo" escribió en el mensaje
news:
> Otra forma de hacerlo es:
>
> 1. creas una tabla temporal
> 2. la llenas con el top ilimitado
> 3. luego borras aquellas filas que el ranking sea mas bajo que el
parametro
> @n que tu tienes
> 4. listas la tabla
>
> saludos
>
> "Rodrigo Ibaraki" escribió en el mensaje
> news:eS$
> > ok gracias ni modo ... concatenando es la otra opcion aunque da que
pensar
> > al respecto :)
> > > del
> > > > top ?
> > > >
> > > > Gracias de Antemano
> > > >
> > > > RIP
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date: 16/08/2004


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