estoy tratando de hacer lo siguiente en un proc, pero conseguir un error de sintaxis incorrecta:¿Cómo hacer SELECCIONAR TOP @Param en un procedimiento almacenado?
SELECT TOP @NumberOfResultsToReturn *
¿qué estoy haciendo mal aquí? Gracias.
estoy tratando de hacer lo siguiente en un proc, pero conseguir un error de sintaxis incorrecta:¿Cómo hacer SELECCIONAR TOP @Param en un procedimiento almacenado?
SELECT TOP @NumberOfResultsToReturn *
¿qué estoy haciendo mal aquí? Gracias.
agregar un paréntesis:
SELECT TOP (@NumberOfResultsToReturn) *
Esto es compatible con SQL Server 2005 y versiones posteriores, pero no en SQL Server 2000. ¿Qué versión está utilizando?
SQL Server: Ponga el argumento de parens:
SELECT TOP (@NumberOfResultsToReturn) *
Usted puede tener que utilizar el método RowNumber() en su lugar.
Aquí se muestra un ejemplo:
DECLARE @PageNum AS INT;
DECLARE @PageSize AS INT;
SET @PageNum = 2;
SET @PageSize = 10;
WITH OrdersRN AS
(
SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum
,OrderID
,OrderDate
,CustomerID
,EmployeeID
FROM dbo.Orders
)
SELECT *
FROM OrdersRN
WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1
AND @PageNum * @PageSize
ORDER BY OrderDate
,OrderID;
EDITAR o puede utilizar paréntesis, ..., que yo desconocía en el momento chicos, gracias :).
Me temo que no se puede hacer esto en SQL 2000, pero se puede tratar de construir la consulta
DECLARE @query VARCHAR(500)
set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table'
EXEC @query
No sabía el truco paréntesis para SQL 2005, también gracias chicos,! !!
Así es como lo hacía en los viejos tiempos:
SET @@ROWCOUNT = @NumberOfResultsToReturn
SELECT ........
SET @@ROWCOUNT = 0
Esto funcionará, aunque SELECT TOP (@NumberOfResultsToReturn)
es preferible si usted está utilizando el servidor SQL que soporta esta sintaxis:
fresca que saber algo nuevo yo mismo, hubiera pensado que requeriría sql dinámico – HLGEM