Dynamic SELECT TOP @var Dans SQL Server

Comment puis-je avoir une variable dynamic définissant la quantité de lignes à renvoyer dans SQL Server? La syntaxe ci-dessous n’est pas valide dans SQL Server 2005+:

DECLARE @count int SET @count = 20 SELECT TOP @count * FROM SomeTable 

 SELECT TOP (@count) * FROM SomeTable 

Cela ne fonctionnera qu’avec SQL 2005+

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 t’aides

Oisin.

(édité pour remplacer @@ rowcount par rowcount – merci augustlights)

Dans l’exemple de x0n, cela devrait être:

 SET ROWCOUNT @top SELECT * from sometable SET ROWCOUNT 0 

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

Il est également possible d’utiliser le SQL dynamic et de l’exécuter avec la commande exec:

 declare @sql nvarchar(200), @count int set @count = 10 set @sql = N'select top ' + cast(@count as nvarchar(4)) + ' * from table' exec (@sql) 

Ou vous venez de mettre la variable entre parenthèses

 DECLARE @top INT = 10; SELECT TOP (@Top) * FROM ; 
 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