sql sql-server if-statement throw

SQL solo un lanzamiento dentro de la sentencia if



sql-server if-statement (3)

Estoy agregando algo de validación a un par de procedimientos almacenados y necesito verificar si algunas de las variables no son nulas (se completaron anteriormente en el procedimiento almacenado).

He estado tratando de agregar un "lanzamiento" dentro de una declaración if como a continuación:

IF (@val is null) BEGIN THROW 50001, ''Custom text'', 1 END

Esto causa un error de sintaxis en el "lanzamiento", ya que está buscando otro código dentro de la instrucción if antes del lanzamiento, pero solo lo necesito para realizar el lanzamiento dentro de la declaración if.

Necesito mantener el procedimiento almacenado lo más ligero posible para que se ejecute lo más rápido posible.

¿Alguien tiene alguna idea?


El error de sintaxis se muestra porque la declaración anterior no se ha terminado. Las otras respuestas funcionarán, pero para hacerlo de esta manera, puede lanzar un punto y coma justo antes del THROW, o adquirir el hábito de terminar todas las declaraciones con punto y coma.

IF (@val is null) BEGIN ;THROW 50001, ''Custom text'', 1 END

o

IF (@val is null) BEGIN; THROW 50001, ''Custom text'', 1; END;

Es posible que hayas notado que:

IF (@val is null) THROW 50001, ''Custom text'', 1

... también funcionará, y esto se debe a que SQL Server sabe que lo próximo que vendrá después de una instrucción IF es siempre una nueva instrucción T-SQL.

Quizás vale la pena señalar que Microsoft ha declarado que el lenguaje T-SQL en el futuro requerirá puntos y coma después de cada declaración, por lo que mi recomendación sería comenzar a crear el hábito ahora.


Si esto es para SQL Server, al resaltador de sintaxis intellisense no le gusta, pero el código debe compilarse y ejecutarse bien. Por supuesto, dado que es una sola declaración, no necesita el bloque BEGIN ... END en absoluto:

IF (@val is null) THROW 50001, ''Custom text'', 1