Dynamic SELECT TOP @var In SQL Server

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

DECLARE @count int
SET @count = 20

SELECT TOP @count * FROM SomeTable
255
demandé sur Brian Kim 2008-10-07 00:05:42

6 réponses

SELECT TOP (@count) * FROM SomeTable

cela ne fonctionnera qu'avec SQL 2005+

462
répondu Brian Kim 2008-10-06 20:06:25

la syntaxe" sélectionnez top (@var) ..."ne fonctionne que dans SQL SERVER 2005+. Pour SQL 2000, vous pouvez faire:

set rowcount @top

select * from sometable

set rowcount 0 

Espérons que cette aide

Oisin.

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

37
répondu x0n 2008-10-06 22:23:14

dans l'exemple de x0n, il devrait être:

SET ROWCOUNT @top

SELECT * from sometable

SET ROWCOUNT 0

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

11
répondu Codewerks 2008-10-06 21:26:55

il est également possible d'utiliser dynamic SQL 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)
3
répondu Jan 2008-10-07 08:37:22

ou vous mettez juste la variable entre parenthèses

DECLARE @top INT = 10;

SELECT TOP (@Top) *
FROM <table_name>;
3
répondu ShawnThompson 2016-01-07 19:38:31
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
2
répondu David Castro 2018-08-23 17:17:47