2010-03-23 4 views
1

J'ai une procédure stockée qui exécute une autre procédure à l'intérieur. La seconde prend parfois du temps à courir mais la première semble se terminer avant d'attendre la seconde. Cela a entraîné des données manquantes, qui auraient dû être mises à jour par la deuxième procédure. Y a-t-il une limite de délai dans la première procédure et peut-elle être prolongée?EXEC Procédure stockée dans un autre n'attend pas pour terminer

+0

D'où exécutez-vous la procédure stockée? –

Répondre

2

créer une nouvelle table:

LogInfo 
LogID  int auto number/identity primary key 
LogDate date default current date and time 
LogValue string 

dans chaque procédure ajouter INSERTs comme ceci:

INSERT INTO LogInfo (LogValue) VALUES ('starting procedure A') 
... 
INSERT INTO LogInfo (LogValue) VALUES ('Calling procedure B') 
... 

INSERT INTO LogInfo (LogValue) VALUES ('ending procedure A') 

faites ceci

SELECT * FROM LogInfo ORDER BY LogID 

pour voir ce qui est arrivé, je l'espère, vous verrez ceci parce que les procédures sont séquentielles et que B ne peut pas terminer après A:

starting procedure A 
Calling procedure B 
starting procedure B 
ending procedure B 
ending procedure A 
+0

Peut-être ajouter à cette table de journal certaines colonnes pour suivre les valeurs que vous voyez modifiées ou non modifiées à des points spécifiques pendant l'exécution? –

+0

Merci, je vais essayer. Je ne pensais pas que A pourrait finir avant B mais je reçois juste des résultats étranges. – markvpc

+0

@ CL4NCY, cela prouvera d'une manière ou d'une autre ce qui se passe. –

1

Je suppose que la procédure stockée interne est en fait en train de terminer/quitter lorsque les procédures stockées s'exécutent séquentiellement et symétriquement. Vous pouvez essayer de scripter la procédure stockée externe et la déposer dans Management Studio, supprimer la déclaration Create Procedure, remplacer les arguments par Declare et ajouter des instructions SET pour les définir sur les valeurs que vous utilisez lors de votre test. En outre, mettez Print instructions après l'appel à la procédure stockée interne et voir si elle se termine.

1

Vous vous trompez, c'est compréhensible. Les procédures stockées s'exécutent de manière synchrone. Cependant, pour diverses raisons, les résultats de la procédure interne peuvent ne pas être visibles pour un processus externe avant qu'ils ne se soient réellement produits. C'est peut-être pourquoi vous voyez tout ce que vous voyez qui vous amène à croire que l'ordre d'achèvement n'est pas synchrone.

Questions connexes