Prendre le count haut dynamicment

Je veux créer une procédure stockée qui prend des valeurs entières en tant que @top de moi afin que je puisse l'utiliser dans ma requête, mais cela ne me permet pas de définir dynamicment la valeur du haut.

 select top @top * from (select url, count(1) as shared from tblshared group by url, uniqid having uniqid = @uniqid) as sha order by shared desc 

Je veux récupérer les n premiers loggings de la table, donc je veux passer la valeur de n dans la procédure stockée et cela me renverra ce nombre d'loggings supérieurs.

Note: Je ne veux pas utiliser exec .

Merci.

Vous pouvez utiliser SET ROWCOUNT :

 SET ROWCOUNT @top SELECT ... SET ROWCOUNT 0 

Cela fonctionnera bien si vous enveloppez @top entre parenthèses

 select top (@top) * from ( select url, count(1) as shared from tblshared group by url, uniqid having uniqid=@uniqid) as sha order by shared desc 

Vous pouvez utiliser ROW_NUMBER() isntead of top

 with t1 as( select url,row_number() over( partition by url, uniqid order by url, uniqid desc) as shared from tblshared where uniqid = @uniqid ) select * from t1 where shared < @top 

REF

 declare @v1 int set @v1 = 25 set rowcount @v1 select * from MyTable Order by DateColumn set rowcount 0