web-dev-qa-db-fra.com

Dynamic SELECT TOP @var dans SQL Server

Comment puis-je avoir une variable dynamique définissant le nombre 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
287
eddiegroves
SELECT TOP (@count) * FROM SomeTable

Cela ne fonctionnera qu'avec SQL 2005+

520
Brian Kim

La syntaxe "select top (@var) ..." ne fonctionne que dans SQL SERVER 2005+. Pour SQL 2000, vous pouvez effectuer les tâches suivantes:

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)

39
x0n

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

11
Codewerks
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
3
David Castro

Il est également possible d'utiliser du SQL dynamique 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
Jan

Ou vous venez de mettre la variable entre parenthèses

DECLARE @top INT = 10;

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