Select Top Dinamico

19/05/2007 - 19:19 por Jose David JDGM. Galviz Muñoz | Informe spam
Un saludo antes que nada.

Como puedo hacer una consulta del tipo:

Declare @cantidad INT
Select @Cantidad=4

Select Top @cantidad *
From miTabla

Gracias.

Preguntas similare

Leer las respuestas

#6 Víctor Rafael Bocanegra Arias
22/05/2007 - 20:31 | Informe spam
Exacto nunca he tenido problemas con ROWCOUNT porque he leido la información
al respecto ;)

Ahora con lo que dices que no es recomendada xq se puede descontinuar, si
cambio de version de SQL
OBVIO que no solo voy a cambiar por un simple ROWCOUNT sino por una mejor
arquitectura de mis BD y por consiguiente utilizar las nuevas
funcionalidades del DBMS. Entonces??? seguiria corriendo mi SQL DINAMICO????
o cambiaria por el SELECT TOP @variable, creo que la respuesta salta, no? :)

Como te digo solo son gustos!

Salu2


"Maxi" escribió en el mensaje
news:%
Te parece, se ve que nunca has tenido problemas con set rowcount y que
alguno se olvido de hacer bien las cosas y luego las querys dan menos
resultados de los esperados. Ademas, te comento para tu informacion, set
Rowcount no es una instruccion recomendada por MS y se puede discontinuar,
te parece exagerado ahora?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:e%
Obvio!!!
Pero preferir SQL-DINAMICO a poner luego de recuperar el resultado que
deseo:

set rowcount 0

me parece demasiado EXAGERADO!!!

Bueno cada uno tiene estilos de PROGRAMACION!!

Salu2

Victor Bocanegra
Barreda Moller
Lima, Peru

"Maxi" escribió en el mensaje
news:
Ojo con rowcount porque no solo lo aplicara a ese select sino a la
conexion y ademas hay que volverlo para atras, prefiero sql-dinamico


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió
en el mensaje news:udJxjH%
O en ves de SQL dinámico podrias usar:

set rowcount @iNumeroRegistros

Suerte, salu2

Víctor Bocanegra

"Gustavo Larriera (MVP)" escribió en el
mensaje news:
En SQL Server 2005 puedes usar TOP con cualquier expresión.

En SS2000 debes usar SQL dinámico para construir la expresión SQL en
una
variable string y ejecutarla posteriormente.

Gustavo Larriera, MVP
Solid Quality
Blog: http://blogs.solidq.com/ES/glarriera
MVP Profile: https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase
/ This message is provided "AS IS" with no warranties expressed or
implied, and confers no rights.

In article ,
says...
Un saludo antes que nada.

Como puedo hacer una consulta del tipo:

Declare @cantidad INT
Select @Cantidad=4

Select Top @cantidad *
From miTabla

Gracias.

















Respuesta Responder a este mensaje
#7 Manuel Etcheto
22/05/2007 - 22:18 | Informe spam
Hola.
Disculpa la intromisión en el hilo, pero me parece que es apresurado lo que
estás diciendo, y se puede prestar a malos entendidos.

1- Sql dinámico, quiere decir que les das permisos sobre las tablas a tus
usuarios... ¿vos lo haces? Eso sí que no es recomendado...

2- Utilizar set rowcount en SELECT y volverlo a cero no tiene ningún
problema. Solo hay que leer la documentación y usarlo bien.

3- lo recomendado es NO utilizarlo en INSERTS, UPDATE, DELETE porque en un
próximo release no va a aplicar sobre I, U y D, con lo que la lógica del
código no tendrá razón de ser. (además actualmente también aplica sobre
triggers, con lo que puede generar un rollo...)

4- Sí en 2005 se recomienda utilizar top (expresión) pero mas que nada por
una cuestión de performance, porque rowcount se aplica sobre el conjunto de
resultados completo, y top (exp) le puede permitir en algunos casos generar
un plan optimizado.

Mi conclusión: en SS2000 rowcount (y documentar para cuando se migre
modificar a top), en SS2005 top(n),
y en ambos caso 0 permisos, 0 sql dinámico.

Salu2
Manuel


"Maxi" escribió en el mensaje
news:%
Te parece, se ve que nunca has tenido problemas con set rowcount y que
alguno se olvido de hacer bien las cosas y luego las querys dan menos
resultados de los esperados. Ademas, te comento para tu informacion, set
Rowcount no es una instruccion recomendada por MS y se puede discontinuar,
te parece exagerado ahora?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:e%
Obvio!!!
Pero preferir SQL-DINAMICO a poner luego de recuperar el resultado que
deseo:

set rowcount 0

me parece demasiado EXAGERADO!!!

Bueno cada uno tiene estilos de PROGRAMACION!!

Salu2

Victor Bocanegra
Barreda Moller
Lima, Peru

"Maxi" escribió en el mensaje
news:
Ojo con rowcount porque no solo lo aplicara a ese select sino a la
conexion y ademas hay que volverlo para atras, prefiero sql-dinamico


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió
en el mensaje news:udJxjH%
O en ves de SQL dinámico podrias usar:

set rowcount @iNumeroRegistros

Suerte, salu2

Víctor Bocanegra

"Gustavo Larriera (MVP)" escribió en el
mensaje news:
En SQL Server 2005 puedes usar TOP con cualquier expresión.

En SS2000 debes usar SQL dinámico para construir la expresión SQL en
una
variable string y ejecutarla posteriormente.

Gustavo Larriera, MVP
Solid Quality
Blog: http://blogs.solidq.com/ES/glarriera
MVP Profile: https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase
/ This message is provided "AS IS" with no warranties expressed or
implied, and confers no rights.

In article ,
says...
Un saludo antes que nada.

Como puedo hacer una consulta del tipo:

Declare @cantidad INT
Select @Cantidad=4

Select Top @cantidad *
From miTabla

Gracias.

















Respuesta Responder a este mensaje
#8 Víctor Rafael Bocanegra Arias
22/05/2007 - 23:46 | Informe spam
Mejor explicacion no creo.

Muy buena informacion Manuel

Salu2

Victor Bocanegra Arias
Barreda Moller
Lima, Peru
"Manuel Etcheto" escribió en el mensaje
news:
Hola.
Disculpa la intromisión en el hilo, pero me parece que es apresurado lo
que estás diciendo, y se puede prestar a malos entendidos.

1- Sql dinámico, quiere decir que les das permisos sobre las tablas a tus
usuarios... ¿vos lo haces? Eso sí que no es recomendado...

2- Utilizar set rowcount en SELECT y volverlo a cero no tiene ningún
problema. Solo hay que leer la documentación y usarlo bien.

3- lo recomendado es NO utilizarlo en INSERTS, UPDATE, DELETE porque en un
próximo release no va a aplicar sobre I, U y D, con lo que la lógica del
código no tendrá razón de ser. (además actualmente también aplica sobre
triggers, con lo que puede generar un rollo...)

4- Sí en 2005 se recomienda utilizar top (expresión) pero mas que nada por
una cuestión de performance, porque rowcount se aplica sobre el conjunto
de resultados completo, y top (exp) le puede permitir en algunos casos
generar un plan optimizado.

Mi conclusión: en SS2000 rowcount (y documentar para cuando se migre
modificar a top), en SS2005 top(n),
y en ambos caso 0 permisos, 0 sql dinámico.

Salu2
Manuel


"Maxi" escribió en el mensaje
news:%
Te parece, se ve que nunca has tenido problemas con set rowcount y que
alguno se olvido de hacer bien las cosas y luego las querys dan menos
resultados de los esperados. Ademas, te comento para tu informacion, set
Rowcount no es una instruccion recomendada por MS y se puede
discontinuar, te parece exagerado ahora?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió
en el mensaje news:e%
Obvio!!!
Pero preferir SQL-DINAMICO a poner luego de recuperar el resultado que
deseo:

set rowcount 0

me parece demasiado EXAGERADO!!!

Bueno cada uno tiene estilos de PROGRAMACION!!

Salu2

Victor Bocanegra
Barreda Moller
Lima, Peru

"Maxi" escribió en el mensaje
news:
Ojo con rowcount porque no solo lo aplicara a ese select sino a la
conexion y ademas hay que volverlo para atras, prefiero sql-dinamico


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió
en el mensaje news:udJxjH%
O en ves de SQL dinámico podrias usar:

set rowcount @iNumeroRegistros

Suerte, salu2

Víctor Bocanegra

"Gustavo Larriera (MVP)" escribió en el
mensaje news:
En SQL Server 2005 puedes usar TOP con cualquier expresión.

En SS2000 debes usar SQL dinámico para construir la expresión SQL en
una
variable string y ejecutarla posteriormente.

Gustavo Larriera, MVP
Solid Quality
Blog: http://blogs.solidq.com/ES/glarriera
MVP Profile:
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna
clase
/ This message is provided "AS IS" with no warranties expressed or
implied, and confers no rights.

In article ,
says...
Un saludo antes que nada.

Como puedo hacer una consulta del tipo:

Declare @cantidad INT
Select @Cantidad=4

Select Top @cantidad *
From miTabla

Gracias.





















Respuesta Responder a este mensaje
#9 Maxi
24/05/2007 - 16:57 | Informe spam
Manuel,

1- Sql dinámico, quiere decir que les das permisos sobre las tablas a tus
usuarios... ¿vos lo haces? Eso sí que no es recomendado...



Depende, hay casos que si y lo tengo controlado y ademas podes eso
resolverlo de otra manera usando roles de aplicacion por ej entonces el
usuario
final nunca tendra acceso a las tablas. Quien dijo que no hay que usar
SQL-Dinamico? no coincido que las cosas deban ser blancas o negras y
SQLDinamico reselve muchas cuestiones, lo que hay que saber es como y donde
usarlo. En sql2005 hay mejoras al respecto con la seguridad , pero te repito
en 2000 tiene tambien solucion lo que decis y es usar ROLES DE APLICACION

2- Utilizar set rowcount en SELECT y volverlo a cero no tiene ningún
problema. Solo hay que leer la documentación y usarlo bien.



Claro que no tiene ningun problema, siempre y cuando te acuerdes, ademas que
sucederia si mientras pones el rowcount hay otro proceso de la misma
conexion que hace otro select por ej? vas a estar mostrando datos invalidos.
Me ha pasado en algunas instalaciones que los querys me daban mal y era
porque habia dando vuelta algun rowcount por ahi, de hecho en mis SP al
principio siempre pongo SET ROWCOUNT 0 para evitar estas cosas.

3- lo recomendado es NO utilizarlo en INSERTS, UPDATE, DELETE porque en un
próximo release no va a aplicar sobre I, U y D, con lo que la lógica del
código no tendrá razón de ser. (además actualmente también aplica sobre
triggers, con lo que puede generar un rollo...)



Si

4- Sí en 2005 se recomienda utilizar top (expresión) pero mas que nada por
una cuestión de performance, porque rowcount se aplica sobre el conjunto
de resultados completo, y top (exp) le puede permitir en algunos casos
generar un plan optimizado.




Opino que aca hay que usar TOP(@var)


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Manuel Etcheto" escribió en el mensaje
news:
Hola.
Disculpa la intromisión en el hilo, pero me parece que es apresurado lo
que estás diciendo, y se puede prestar a malos entendidos.

1- Sql dinámico, quiere decir que les das permisos sobre las tablas a tus
usuarios... ¿vos lo haces? Eso sí que no es recomendado...

2- Utilizar set rowcount en SELECT y volverlo a cero no tiene ningún
problema. Solo hay que leer la documentación y usarlo bien.

3- lo recomendado es NO utilizarlo en INSERTS, UPDATE, DELETE porque en un
próximo release no va a aplicar sobre I, U y D, con lo que la lógica del
código no tendrá razón de ser. (además actualmente también aplica sobre
triggers, con lo que puede generar un rollo...)

4- Sí en 2005 se recomienda utilizar top (expresión) pero mas que nada por
una cuestión de performance, porque rowcount se aplica sobre el conjunto
de resultados completo, y top (exp) le puede permitir en algunos casos
generar un plan optimizado.

Mi conclusión: en SS2000 rowcount (y documentar para cuando se migre
modificar a top), en SS2005 top(n),
y en ambos caso 0 permisos, 0 sql dinámico.

Salu2
Manuel


"Maxi" escribió en el mensaje
news:%
Te parece, se ve que nunca has tenido problemas con set rowcount y que
alguno se olvido de hacer bien las cosas y luego las querys dan menos
resultados de los esperados. Ademas, te comento para tu informacion, set
Rowcount no es una instruccion recomendada por MS y se puede
discontinuar, te parece exagerado ahora?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió
en el mensaje news:e%
Obvio!!!
Pero preferir SQL-DINAMICO a poner luego de recuperar el resultado que
deseo:

set rowcount 0

me parece demasiado EXAGERADO!!!

Bueno cada uno tiene estilos de PROGRAMACION!!

Salu2

Victor Bocanegra
Barreda Moller
Lima, Peru

"Maxi" escribió en el mensaje
news:
Ojo con rowcount porque no solo lo aplicara a ese select sino a la
conexion y ademas hay que volverlo para atras, prefiero sql-dinamico


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió
en el mensaje news:udJxjH%
O en ves de SQL dinámico podrias usar:

set rowcount @iNumeroRegistros

Suerte, salu2

Víctor Bocanegra

"Gustavo Larriera (MVP)" escribió en el
mensaje news:
En SQL Server 2005 puedes usar TOP con cualquier expresión.

En SS2000 debes usar SQL dinámico para construir la expresión SQL en
una
variable string y ejecutarla posteriormente.

Gustavo Larriera, MVP
Solid Quality
Blog: http://blogs.solidq.com/ES/glarriera
MVP Profile:
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna
clase
/ This message is provided "AS IS" with no warranties expressed or
implied, and confers no rights.

In article ,
says...
Un saludo antes que nada.

Como puedo hacer una consulta del tipo:

Declare @cantidad INT
Select @Cantidad=4

Select Top @cantidad *
From miTabla

Gracias.





















Respuesta Responder a este mensaje
#10 Maxi
24/05/2007 - 17:04 | Informe spam
Hola claro que no solamente cambiaras por eso, pero bueno vuelvo a repetir,
son gustos como vos bien decis, yo simplemente trato de evitar poner SET que
luego no pueda controlar, pero cada cual... y no esta mal que tengamos
puntos de vista distintos, de eso se trata la vida sino seria un tanto
aburrida no?

Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió en
el mensaje news:
Exacto nunca he tenido problemas con ROWCOUNT porque he leido la
información al respecto ;)

Ahora con lo que dices que no es recomendada xq se puede descontinuar, si
cambio de version de SQL
OBVIO que no solo voy a cambiar por un simple ROWCOUNT sino por una mejor
arquitectura de mis BD y por consiguiente utilizar las nuevas
funcionalidades del DBMS. Entonces??? seguiria corriendo mi SQL
DINAMICO????
o cambiaria por el SELECT TOP @variable, creo que la respuesta salta, no?
:)

Como te digo solo son gustos!

Salu2


"Maxi" escribió en el mensaje
news:%
Te parece, se ve que nunca has tenido problemas con set rowcount y que
alguno se olvido de hacer bien las cosas y luego las querys dan menos
resultados de los esperados. Ademas, te comento para tu informacion, set
Rowcount no es una instruccion recomendada por MS y se puede
discontinuar, te parece exagerado ahora?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió
en el mensaje news:e%
Obvio!!!
Pero preferir SQL-DINAMICO a poner luego de recuperar el resultado que
deseo:

set rowcount 0

me parece demasiado EXAGERADO!!!

Bueno cada uno tiene estilos de PROGRAMACION!!

Salu2

Victor Bocanegra
Barreda Moller
Lima, Peru

"Maxi" escribió en el mensaje
news:
Ojo con rowcount porque no solo lo aplicara a ese select sino a la
conexion y ademas hay que volverlo para atras, prefiero sql-dinamico


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Víctor Rafael Bocanegra Arias" escribió
en el mensaje news:udJxjH%
O en ves de SQL dinámico podrias usar:

set rowcount @iNumeroRegistros

Suerte, salu2

Víctor Bocanegra

"Gustavo Larriera (MVP)" escribió en el
mensaje news:
En SQL Server 2005 puedes usar TOP con cualquier expresión.

En SS2000 debes usar SQL dinámico para construir la expresión SQL en
una
variable string y ejecutarla posteriormente.

Gustavo Larriera, MVP
Solid Quality
Blog: http://blogs.solidq.com/ES/glarriera
MVP Profile:
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna
clase
/ This message is provided "AS IS" with no warranties expressed or
implied, and confers no rights.

In article ,
says...
Un saludo antes que nada.

Como puedo hacer una consulta del tipo:

Declare @cantidad INT
Select @Cantidad=4

Select Top @cantidad *
From miTabla

Gracias.





















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