web-dev-qa-db-fra.com

Syntaxe incorrecte près de 'THROW'

IF @SQL IS NOT NULL
BEGIN
    BEGIN TRY 
        EXEC sp_executesql @SQL
        PRINT 'SUCCESS: ' + @SQL
    END TRY 
    BEGIN CATCH
        SET @ErrorMessage = 
                    N'Error dropping constraint' + @CRLF
                    + 'Table ' + @TableName + @CRLF
                    + 'Script: ' + @SQL + @CRLF
                    + 'Error message: ' + ERROR_MESSAGE() + @CRLF
        THROW  50100, @ErrorMessage, 1;
    END CATCH
END

Lorsque le CATCH s'exécute, j'obtiens l'erreur suivante:

Msg 102, niveau 15, état 1, ligne 257
Syntaxe incorrecte près de 'THROW'.

Remplacement de THROW par PRINT @ErrorMessage travaux.

Remplacement de @ErrorMessage variable avec une chaîne littérale fonctionne.

Selon la documentation, cependant, THROW est censé pouvoir prendre une variable. Je ne sais pas quoi faire de cela.

25
Metaphor

De MSDN :

L'instruction avant l'instruction THROW doit être suivie du terminateur d'instruction point-virgule (;).

36
Sam Axe

De la Documentation sur THROW, Remarques :

L'instruction avant l'instruction THROW doit être suivie du terminateur d'instruction point-virgule (;).

C'est une bonne habitude de toujours terminer vos déclarations par un point-virgule.

6
TT.

Je viens de frapper la même erreur mais pour une raison complètement différente. La machine que j'utilise est légèrement ancienne mais dispose de SSMS 2012 (la version que Throw a introduite). Cependant, le serveur SQL réel est 10,5 (qui est 2008 R2; voir https://docs.Microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility- level ) et donc la commande n'est pas valide.

Avec un peu de chance, il n'y aura pas trop d'exemples de configurations vieilles de dix ans, mais revérifiez si vous obtenez ceci et vous êtes sûr que votre syntaxe est correcte!

4
d219