declare @top int
set @top = 5
select top @top * from tablename
¿Es posible?Usar variable con TOP en la instrucción de selección en SQL Server sin hacerlo dinámico
¿Alguna idea para tal lógica (no quiero usar la consulta dinámica)?
declare @top int
set @top = 5
select top @top * from tablename
¿Es posible?Usar variable con TOP en la instrucción de selección en SQL Server sin hacerlo dinámico
¿Alguna idea para tal lógica (no quiero usar la consulta dinámica)?
Sí, en SQL Server 2005 es posible utilizar una variable en la cláusula top
.
select top (@top) * from tablename
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
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 :-)
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
Gracias por la respuesta alternativa – Paresh
+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
Gracias por su esfuerzo, lo que realmente ayudó ¡¡¡a mi!!! – Paresh
es completamente extraño ... No estaba al tanto de esto y me quedé atrapado durante unos minutos en esto. Gracias (+1) – Christos