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.
De MSDN :
L'instruction avant l'instruction THROW doit être suivie du terminateur d'instruction point-virgule (;).
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.
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!