SQL Server Stored Proc prend beaucoup plus de time à exécuter que la même requête exécutée à partir du text dans Management Studio

Donc, voici un peu étrange … J'ai un proc stocké qui prend 40 secondes à courir. Je copy le contenu du proc stocké dans une nouvelle window de requête, modifie les 2 parameters d'input (qui sont les deux dates) afin qu'ils soient déclarés et définis, et exécute la requête. Il s'agit essentiellement d'une exécution instantanée, sous 1 seconde. La seule différence est que le proc stocké prend les 2 dates comme parameters.

Quelqu'un a-t-il une idée de ce qui peut arriver?

(Je cours SQL Server 2005)

La recompilation renifle les parameters, donc cela ne fait aucune différence.

Cet article explique ma déclaration …

… les valeurs des parameters sont reniflées lors de la compilation ou de la recompilation …

Vous devez masquer les parameters:

ALTER PROCEDURE [uspFoo] @Date1 datetime, @Date2 datetime AS BEGIN DECLARE @IDate1 datetime, @IDate2 datetime; SELECT @IDate1 = @Date1, @IDate2 = @Date2; -- Stuff here that depends on @IDate1 and @IDate2 END 

Comme le dit gbn, il s'agit d'un problème de reniflage de parameters. Une alternative à sa suggestion est d'inclure la ligne suivante à la fin de votre requête:

 OPTION (RECOMPILE) 

J'ai rencontré un problème similaire et j'ai découvert qu'il était dû au fait que je définissais le paramètre en tant que DATE, mais que la colonne était comparée dans la clause WHERE dans DATETIME, de sorte que SSMS convertissait le type de données pour chaque ligne. comparant. La modification du type de données de paramètre en DATETIME ou le masquage du paramètre comme indiqué ci-dessus résout le problème.

Exécutez le profileur et capturez les plans de requête pour l'exécution. Vérifiez pour voir quelles sont les différences – vous pouvez être en mesure d'affiner la requête ou de forcer un plan particulier.