2008-10-06 8 views
236

¿Cómo puedo tener una variable dinámica que establezca la cantidad de filas a devolver en SQL Server? A continuación no es una sintaxis válida en SQL Server 2005 +:Dynamic SELECCIONAR ARRIBA @var En SQL Server

DECLARE @count int 
SET @count = 20 

SELECT TOP @count * FROM SomeTable 
+2

¿Está ejecutando SQL 2005 o 2008? –

+0

Ejecutando SQL Server 2005 actualmente – eddiegroves

+1

Buena pregunta. Gracias. –

Respuesta

425
SELECT TOP (@count) * FROM SomeTable 

Esto sólo funcionará con SQL 2005 +

+37

Siempre me olvido de los paréntesis también. –

+10

esto es genial! todo este tiempo pensé que tenía que usar sql dinámico. – Laguna

36

La sintaxis "seleccione la parte superior (@ var) ..." sólo funciona en SQL SERVIDOR 2005+. Para SQL 2000, puede hacer:

set rowcount @top 

select * from sometable 

set rowcount 0 

Esperanza esto ayuda

Oisin.

(editado para reemplazar @@ recuento de filas con el recuento de filas - augustlights gracias)

+0

He oído que es posible obtener un número de fila incorrecto con @@ RowCount si tiene una clave principal de varias columnas. ¿Es eso cierto? –

3

También es posible utilizar SQL dinámico y ejecutar con el comando exec:

declare @sql nvarchar(200), @count int 
set @count = 10 
set @sql = N'select top ' + cast(@count as nvarchar(4)) + ' * from table' 
exec (@sql) 
+2

Pero sea (muy) cauteloso con los [ataques de inyección SQL] (https://en.wikipedia.org/wiki/SQL_injection) con este enfoque – MadSkunk

1

O yo u sólo hay que poner la variable entre paréntesis

DECLARE @top INT = 10; 

SELECT TOP (@Top) * 
FROM <table_name>; 
0
declare @rows int = 10 

select top (@rows) * 
from Employees 
order by 1 desc -- optional to get the last records using the fist column of the table 
Cuestiones relacionadas