2009-12-18 20 views

Respuesta

286

Sí, en SQL Server 2005 es posible utilizar una variable en la cláusula top.

select top (@top) * from tablename 
+0

Gracias por su esfuerzo, lo que realmente ayudó ¡¡¡a mi!!! – Paresh

+0

es completamente extraño ... No estaba al tanto de esto y me quedé atrapado durante unos minutos en esto. Gracias (+1) – Christos

38

SQL Server 2005 en realidad nos permite parametrizar la cláusula TOP, utilizando una variable, expresión o instrucción. Por lo que puede hacer cosas como:

SELECT TOP (@foo) a FROM table ORDER BY a 

SELECT TOP (SELECT COUNT(*) FROM somewhere else) a FROM table ORDER BY a 

SELECT TOP (@foo + 5 * 4/2) a FROM table ORDER BY a 

Source

24

En 2005 y posterior, puede hacerlo ya que hay varias respuestas en este hilo.

Lo que es menos conocido es que puede lograr esto también en 2k, usando SET ROWCOUNT.

-- Works in all versions 
    SELECT TOP 10 

    -- Does not work on 2000 
    SELECT TOP (10) 
    SELECT TOP (@rows) 

    -- Works in both 2ooo and 2oo5 
    SET ROWCOUNT @max 

    SELECT * 
    FROM ... 

    SET ROWCOUNT 0 

Nota, si olvida la SET ROWCOUNT 0 al final, el límite persiste .. y el resultado final será de muy difícil localizar errores :-)

+4

También tenga en cuenta que SET ROWCOUNT no afecta el plan de ejecución, por lo que es preferible usar TOP en SQL 2005. – Guffa

+0

Gracias por la respuesta alternativa – Paresh

+2

+1 para la discusión acerca de "ESTABLECER CUOTA DE ROW". Esta no es la solución que utilicé, pero me gusta que lo haya mencionado – Sam

Cuestiones relacionadas