2010-06-01 8 views
0

Le code suivant fonctionne comme un charme:Question sur la syntaxe SQL Transact

BEGIN TRY 
    BEGIN TRANSACTION 

    COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK; 

    DECLARE @ErrorMessage NVARCHAR(4000), 
      @ErrorSeverity int; 
    SELECT @ErrorMessage = ERROR_MESSAGE(), 
      @ErrorSeverity = ERROR_SEVERITY();  
    RAISERROR(@ErrorMessage, @ErrorSeverity, 1); 
END CATCH 

Mais ce code donne une erreur:

BEGIN TRY 
    BEGIN TRANSACTION 

    COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
     ROLLBACK; 

    RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), 1); 
END CATCH 

Pourquoi?

+0

quelle erreur? .... –

+0

Quelle est l'erreur? – RobS

Répondre

3

RAISERROR() Impossible de prendre les appels comme paramètres. Doit être des constantes ou des variables.

+0

Un "dispositif" terriblement ennuyeux à mon avis. –

0

+1 L'instruction RAISERROR génère un message d'erreur en récupérant le message à partir de la vue de catalogue sys.messages ou en construisant la chaîne de message au moment de l'exécution. Donc, d'accord avec le collègue @Mitch Wheat je vais aller avec sa recommandation.