Estoy permitiendo que el usuario final defina cuántas filas devuelve una consulta (SELECT TOP (@x)). ¿Hay algún valor que pueda ingresarse donde se devuelven todas las filas? ¿O tengo que crear dinámicamente la consulta sin el TOP (@x) si quieren que se devuelvan todas las filas?
Estoy usando SQL Server 2012.
sql-server
Wayne E. Pfeffer
fuente
fuente

TOP ... ORDER BYalgo? ¿ORDER BYSigue siendo necesario algo en el caso de que seleccione todo?TOPestá fuera de discusión? ¿Como si estuvieras lidiando con alguna consulta predefinida y tienes que pasarle algo ?Respuestas:
Bueno, parece que TOP es un BIGINT si no estás usando un PERCENT . Eso significa que puede pasar el valor máximo de BIGINT ,
Dudo seriamente que alguna vez veas una mesa tan grande. Sin embargo, no estoy seguro de qué tipo de efecto tendría en el plan de consulta.
fuente
@xes un BIGINT, entoncesSET @x = 0x7fffffffffffffffpuede ser más claro para algunos. Es más fácil de recordar de todos modos.7y luego el resto esFy necesita 16 caracteres en total para los 8 bytes. Y sí, se convertirá implícitamente si se asigna a una variable de ese tipo de datos.0x7fffffffffffffffrepresentación del valor máximo debiginten SqlServer. La razón es que en la notación constante binaria SqlServer tienes7fen el byte más bajo , mientras que en lenguajes como c ++ lo tienes en el byte más alto para obtener un máximo de tipo integral con signo.También podrías considerar
En lugar de
El valor que necesitaría para establecer @x es
0deshabilitarlo.Esto está en desuso para las declaraciones de modificación de datos, pero no está en desuso
SELECT.En 2012 se compila un plan diferente para el caso que
ROWCOUNTes 0 frente a algún valor distinto de cero.Si
ORDER BY Bazsolo está ahí para dar significado al enTOPlugar de proporcionar un orden de presentación para los resultados y no tiene un índice que lo respalde, dividirlo en dos consultas evitaría una clasificación innecesaria en el0caso.fuente
SELECT TOP 100 PERCENT se puede usar para omitir cualquier error al usar "TOP" en una consulta.
fuente
fuente
@x) allí, y ahora están preguntando a qué valor pasar para@xque signifique "todas las filas", independientemente de cuántas filas tenga realmente la tabla. Tal vez podría descubrir cómo adaptar su solución para que coincida con los requisitos del OP.(SELECT COUNT(*) FROM YourTable)No es un valor.