Comment faire SELECT TOP @Param dans une procédure stockée?

J’essaie de faire ce qui suit dans un processus, mais j’obtiens une erreur de syntaxe incorrecte:

SELECT TOP @NumberOfResultsToReturn * 

Que fais-je mal ici? Merci.

Ajouter une parenthèse:

 SELECT TOP (@NumberOfResultsToReturn) * 

SQL Server: Mettez l’argument dans parens:

 SELECT TOP (@NumberOfResultsToReturn) * 

Voici comment je le faisais autrefois:

 SET @@ROWCOUNT = @NumberOfResultsToReturn SELECT ........ SET @@ROWCOUNT = 0 

Cela fonctionnera bien que SELECT TOP (@NumberOfResultsToReturn) soit préférable si vous utilisez un serveur SQL qui prend en charge cette syntaxe:

Cela est pris en charge dans SQL Server 2005 et versions ultérieures, mais pas dans SQL Server 2000. Quelle version utilisez-vous?

Vous devrez peut-être utiliser la méthode RowNumber () à la place.

Voici un exemple:

 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; 

EDIT Ou vous pourriez utiliser des parenthèses … que je n’étais pas au courant à l’époque 🙂 Merci les gars.

Je crains que vous ne puissiez pas le faire dans SQL 2000, mais vous pouvez essayer de construire la requête

 DECLARE @query VARCHAR(500) set @query = 'SELECT TOP ' + @NumberOfResultsToReturn + '* FROM table' EXEC @query 

Je ne connaissais pas le tour de parenthèse pour SQL 2005, merci aussi les gars, !!!