TSQL rend l'instruction EXECUTE synchrone

J'ai deux instructions TSQL EXEC

EXECUTE (N'MyDynamicallyGeneratedStoredProcedure') -- return 0 on success SELECT @errCode = @@ERROR ; IF (@errCode = 0) BEGIN EXEC 'A Sql Statement using ##temptable created from first', @returnValue END 

Comment puis-je rendre les deux EXEC synchrones? ; À l'heure actuelle, le deuxième EXEC n'attend pas la fin du premier EXECUTE. J'ai essayé d'émettre un timeout WaitFor, il attend mais la deuxième déclaration EXEC ne revient jamais.

Merci.

Mettre à jour, Voici plus d'informations:

  1. First execute crée une table temporaire globale et la remplit à partir d'une requête SELECT complexe.
  2. Deuxième EXEC est une procédure stockée CLR qui génère un SP dynamic, basé sur les variables de la table Global Temp récemment créée et remplie.

Maintenant, le deuxième EXEC, se plaint que la table Global Temp est introuvable.

Mise à jour 2, trouvé le problème (Et c'est moi !!)

GBN (et autres) était à bout portant sur la réponse. EXEC EST synchrone. Le problème? Ma compréhension du problème lui-même .. J'avais mentionné

  1. EXECUTE (N'MyDynamicallyGeneratedStoredProcedure ') – Retourne 0 en cas de succès

Cela aurait dû être:

1 (a) EXECUTE (N'CreateMyDynamicStoredProcedure ') – returnne 0 en cas de succès

1 (b) EXECUTE (N'MyDynamicStoredProcedure ') – Retourne 0 en cas de succès

J'ai manqué que 1 (b) a été effectivement exécuté ailleurs et après l'étape (2).

(Je devrais aller chercher une vie !!)

EXECUTE est synchrone. Le 2ème court après le 1er. Toujours.

Avez-vous plusieurs connections exécutant le même code? Vous utilisez une table temporaire globale qui sera visible pour toutes les connections afin qu'elle ressemble à une exécution asynchronous …

Comme la réponse de gbn l' a montré, EXECUTE est synchrone.

Le problème peut être que votre object de connection SQL dans la procédure stockée CRL n'est pas dans le même context que votre script de traitement par lots. Votre table temporaire globale aurait dû être supprimée après l'exécution de EXECUTE (N'MyDynamicallyGeneratedStoredProcedure')

Assurez-vous que vous créez votre object SQLConnection en transmettant "context connection=true" Voici la réponse post où quelqu'un a eu un problème similaire en accédant à la table temporaire puisque SQLConnection ne se trouvait pas dans le même context de connection.

Accès aux tables #temp créées par TSQL à partir de la procédure stockée CLR. C'est possible?

Si votre deuxième procédure stockée CRL s'exécute via une connection différente, sprl CRL ne sera pas en mesure d'accéder à la table temporaire globale car il aurait dû être supprimé.

Reportez-vous à ce message sur le cycle de vie temporaire global (lorsque la température gloal est supprimée)
Suppression de tables temporaires globales (## tempTable) dans SQL Server