2009-12-20 17 views
22

Utilizando el generador de consultas VS2008, yo estoy tratando de hacer una consulta que obtiene un parámetro para el "TOP" Comando, y luego enfrentarse a un error "Error en la parte superior de expresión"SQL: ¿Cómo uso el parámetro TOP como en SELECT TOP @amount?

Obras:

SELECT TOP 5 * FROM dbo.SomeTable 
WHERE SomeColumn = SomeValue 

no funciona:

SELECT TOP @param1 * FROM dbo.SomeTable 
WHERE SomeColumn = SomeValue 

alt text http://www.freeimagehosting.net/uploads/f9b9354577.jpg

Respuesta

64

Necesita paréntesis, y sólo para SQL Server 2005 y por encima de

SELECT TOP (@param1) ... 
6

Para versiones anteriores de SQL Server, puede utilizar:

SET ROWCOUNT @NumberOfResults 
SELECT * FROM MyTable 
SET ROWCOUNT 0 

However, you should not use this technique on 2008:

Utilizando SET ROWCOUNT no afectará DELETE, INSERT y UPDATE declaraciones en la próxima versión de SQL Server (2008). No use SET ROWCOUNT con DELETE, INSERT y las instrucciones UPDATE en un nuevo trabajo de desarrollo, y planifique modifique las aplicaciones que actualmente usan . Además, para las instrucciones DELETE, INSERT y UPDATE que actualmente usan SET ROWCOUNT, recomendamos que las reescriba para usar la sintaxis TOP. Para obtener más información, vea ELIMINAR (Transact-SQL), INSERTAR (Transact-SQL), o ACTUALIZAR (Transact-SQL).