try sintaxis manejo generate for excepciones example error catch sql-server tsql sql-server-2014

sql server - manejo - Sintaxis incorrecta cerca de ''THROW''



sql server throw example (3)

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

Cuando se ejecuta el CATCH , me sale el siguiente error:

Mensaje 102, Nivel 15, Estado 1, Línea 257
Sintaxis incorrecta cerca de ''THROW''.

Reemplazar THROW con PRINT @ErrorMessage funciona.

Reemplazar la variable @ErrorMessage con una cadena literal funciona.

Sin embargo, según los documentos, se supone que THROW puede tomar una variable. No estoy seguro de qué hacer con esto.


Acabo de cometer el mismo error pero por una razón completamente diferente. La máquina que estoy usando es un poco antigua pero tiene SSMS 2012 (la versión que se introdujo Throw). Sin embargo, el servidor SQL real es 10.5 (que es 2008 R2; consulte https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level ) y así El comando no es válido.

Esperemos que no haya demasiados ejemplos de configuraciones de diez años por ahí, ¡pero comprueba si obtienes esto y estás seguro de que tu sintaxis es correcta!


De la Documentación en TIRADA, Observaciones :

La instrucción antes de la instrucción THROW debe ir seguida del terminador de la coma (;).

Es un buen hábito terminar siempre tus afirmaciones con un punto y coma.


Desde MSDN :

La instrucción antes de la instrucción THROW debe ir seguida del terminador de la coma (;).