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 BY
algo? ¿ORDER BY
Sigue siendo necesario algo en el caso de que seleccione todo?TOP
está 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
@x
es un BIGINT, entoncesSET @x = 0x7fffffffffffffff
puede ser más claro para algunos. Es más fácil de recordar de todos modos.7
y luego el resto esF
y 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.0x7fffffffffffffff
representación del valor máximo debigint
en SqlServer. La razón es que en la notación constante binaria SqlServer tienes7f
en 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
0
deshabilitarlo.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
ROWCOUNT
es 0 frente a algún valor distinto de cero.Si
ORDER BY Baz
solo está ahí para dar significado al enTOP
lugar 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 el0
caso.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@x
que 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.