Est-il possible d'append une limite de nombre de lignes à une requête dans une procédure stockée existante?

Dites que j'ai un proc stocké qui returnne un certain nombre de lignes mais je veux limiter la quantité de lignes en utilisant TOP ou autre chose. Est-il possible de le faire dynamicment sans créer un autre proc stocké pour mettre à jour un proc stocké existant pour faire cela?

donc mon sp pourrait ressembler à ceci:

create procedure [dbo].[myproc] @param1 int as begin select sumthing from mytable where mycolumn=2 end 

Comment est-ce que je peux append un autre param à ce sp et le rendre facultatif pour limiter le nombre de rangées quand j'en ai besoin?

Comme ça:

 create procedure [dbo].[myproc] @param1 int, @optionalRowcount int = 999999999999 as begin select TOP(@optionalRowcount) sumthing from mytable where mycolumn=2 end 

L'option rowcount est probablement le moyen le plus simple de résoudre ce problème pour un scénario SELECT, mais j'ai juste remarqué sur la page MSDN que rowcount pourrait être déconseillé dans une future version pour DELETE, INSERT et UPDATE. Donc, je vais postr cette alternative ici au cas où c'est utile pour quelqu'un:

 create procedure [dbo].[myproc] @param1 int = null as begin if @param1 is null select * from myTable else select top (@param1) * from myTable end 

Vous pouvez utiliser l'option set rowcount. Si @MaxRowCount = 0, toutes les lignes seront returnnées. Sinon, le nombre de lignes sera limité à la valeur @MaxRowCount.

 create procedure [dbo].[myproc] @param1 int, @MaxRowCount Int as begin Set rowcount @MaxRowCount select sumthing from mytable where mycolumn=2 set rowcount 0 end