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, !!!