385 votes

SELECT TOP @var dynamique en SQL Server

Comment puis-je avoir une variable dynamique définissant le nombre de lignes à retourner dans le serveur SQL ? La syntaxe ci-dessous n'est pas valide en SQL Server 2005+ :

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable

2 votes

Utilisez-vous SQL 2005 ou 2008 ?

0 votes

Exécution actuelle de SQL Server 2005

691voto

Brian Kim Points 8951
SELECT TOP (@count) * FROM SomeTable

Cela ne fonctionnera qu'avec SQL 2005+.

69 votes

J'oublie toujours les parenthèses aussi.

15 votes

C'est génial ! Pendant tout ce temps, je pensais que je devais utiliser le sql dynamique.

3 votes

Qui d'autre est ici pour se rendre compte de l'erreur stupide commise dans sa requête en n'ajoutant pas les parenthèses ?

43voto

x0n Points 26002

La syntaxe "select top (@var) ..." ne fonctionne que dans SQL SERVER 2005+. Pour SQL 2000, vous pouvez faire :

set rowcount @top

select * from sometable

set rowcount 0 

J'espère que cela vous aidera

Oisin.

(modifié pour remplacer @@rowcount par rowcount - merci augustlights)

2 votes

J'ai entendu dire qu'il est possible d'obtenir un numéro de ligne incorrect avec @@RowCount si vous avez une clé primaire à plusieurs colonnes. Est-ce exact ?

14voto

Codewerks Points 3284

Dans l'exemple de x0n, ça devrait être :

SET ROWCOUNT @top

SELECT * from sometable

SET ROWCOUNT 0

http://msdn.microsoft.com/en-us/library/ms188774.aspx

9voto

user3199531 Points 1
declare @rows int = 10

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

6voto

ShawnThompson Points 51

Ou bien vous mettez simplement la variable entre parenthèses

DECLARE @top INT = 10;

SELECT TOP (@Top) *
FROM <table_name>;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X