declare @top int
set @top = 5
select top @top * from tablename
C'est possible?
Ou une idée pour une telle logique (je ne veux pas utiliser la requête dynamique)?
Oui, dans SQL Server 2005, il est possible d’utiliser une variable dans la clause top
.
select top (@top) * from tablename
SQL Server 2005 nous permet en réalité de paramétrer la clause TOP à l'aide d'une variable, d'une expression ou d'une instruction. Pour que vous puissiez faire des choses comme:
SELECT TOP (@foo) a FROM table ORDER BY a
SELECT TOP (SELECT COUNT(*) FROM somewhere else) a FROM table ORDER BY a
SELECT TOP (@foo + 5 * 4 / 2) a FROM table ORDER BY a
En 2005 et après, vous pouvez le faire car ce fil contient plusieurs réponses.
Ce qui est moins connu, c'est que vous pouvez y parvenir également en 2k, en utilisant SET ROWCOUNT.
-- Works in all versions
SELECT TOP 10
-- Does not work on 2000
SELECT TOP (10)
SELECT TOP (@rows)
-- Works in both 2ooo and 2oo5
SET ROWCOUNT @max
SELECT *
FROM ...
SET ROWCOUNT 0
Notez que si vous oubliez SET ROWCOUNT 0 à la fin, la limite persiste .. et vous aurez très difficile de localiser les bogues :-)