2009-10-31 3 views
0

Je suis en train de créer une procédure stockée qui utiliseSélectionnez les lignes Derniers (premier) d'une table à l'aide de paramètres procédure stockée (SQL 2008)

SELECT TOP 20 * de tblRecords ....

Je veux que le nombre de lignes renvoyées soit envoyé à la procédure en tant que paramètre.

Pour une raison quelconque, il dit que j'ai une erreur de syntaxe près du paramètre que j'utilise:

SELECT TOP @PARAM de tblRecords ....

est-il ou un droit chemin à faire Aurai-je besoin pour construire l'instruction à l'aide concaténations de chaîne et l'exécuter ....

Répondre

6

essayer:

SELECT TOP (@PARAM) * from tblRecords .... 

MSDN recommande d'utiliser des parenthèses toujours, il est pris en charge sans pour rétrocompatibilité:

...For backward compatibility, TOP expression without parentheses in SELECT statements is supported, but we do not recommend this.

+0

Une idée de ce qui rend cet usage différent de l'utilisation régulière des paramètres? – Dani

+0

+1 Vous avez besoin d'un * après (@PARAM) btw :) – Andomar

+0

Je sais, je l'ai dans mon code. Je me demande pourquoi partout ailleurs je n'ai pas besoin d'utiliser() avec @params .... – Dani

3

Dans la procédure stockée, avant de faire la sélection, un problème:

SET ROWCOUNT @param 

ce wi ll limitera le nombre de lignes renvoyées à @param.

Une fois la requête, réglez-le à 0:

SET ROWCOUNT 0 
+0

que se passe-t-il si je ne le réinitialise pas à 0? – Dani

+0

Les requêtes @param rangées jusqu'à ce que vous le réinitialiser. La réponse de Najmeddine semble fonctionner, c'est nettement mieux. – Andomar

+0

Cette solution fonctionne également. – Dani

Questions connexes