2011-08-05 2 views
2

Nous avons une procédure stockée dans SQL Server 2005 avec un bit complexe de requête de sélection unique. Récemment dans un environnement, nous avons remarqué que pour un petit sous-ensemble des résultats renvoyés par le proc stocké, il y avait des enregistrements en double. Lorsque nous avons exécuté la requête sql directement, nous avons obtenu l'ensemble correct d'enregistrements sans aucun doublon. La procédure stockée utilise beaucoup de vues et de jointures (jointure interne/jointure gauche). Une théorie que j'ai est que d'une certaine façon la procédure stockée utilise des plans d'exécution en cache car nous avons modifié certaines vues récemment, mais je n'ai pas assez d'expertise SQL pour être sûr de cela. Est-ce que quelqu'un a une idée?Procédure stockée renvoyant des résultats en double où, lorsque vous exécutez le SQL, elle s'exécute directement

Merci pour votre aide, Ashish

+1

Du code s'il vous plaît? –

+1

Vous devez fournir plus d'informations. Y a-t-il une configuration de niveau d'isolation dans le proc? Pouvez-vous poster un exemple de code? – JNK

+0

Je dirais que vous aboyez le mauvais arbre en pensant que ce sont des plans d'exécution en cache. Vous devriez publier autant de SQL que vous le pouvez dans votre question et laisser les gens inspecter cela. –

Répondre

0

Run sp_recompile sur la procédure stockée pour effacer le cache de procédure pour cette procédure stockée.

Pour effacer tout le cache de procédure exécuter

DBCC FREEPROCCACHE

Voici un exemple de recompiler si vous voulez le mettre dans un script réutilisable:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
/****** Object: Maintenance - StoredProcedure [Sample].[SampleSearch] Script Date: 07/28/2011 14:15:15 ******/ 
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'Sample' AND ROUTINE_NAME = 'Sampleearch')) 
BEGIN 
    PRINT 'Marking procedure [Sample].[SampleSearch] for recompile' 
    EXEC sp_recompile 'Sample.SampleSearch' 
    PRINT 'Finished marking procedure [Sample].[SampleSearch] for recompile' 
END 

GO 

Cependant, si le La requête renvoie des résultats différents, peut-être activer le suivi SQL ou déboguer l'appel du code pour s'assurer que les mêmes paramètres d'entrée et de sortie sont utilisés dans les deux cas.

1

Différents résultats peuvent être provoqués par différents paramètres de connexion (par exemple, ansi_nulls, arith_abort, etc.).

Questions connexes