Search code examples
sqlsql-serverif-statementthrow

SQL only a throw inside if statement


I am adding some validation to a couple of stored procedures and need to check if some of the variables are not null (they are populated earlier in the stored procedure).

I have been trying to add a "throw" inside an if statement like below:

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

This causes a syntax error on the "throw" as it is looking for other code inside the if statement prior to the throw but I only need it to perform the throw inside the if statement.

I need to keep the stored procedure as light as possible to keep it as fast as possible to execute.

Does anyone have any ideas?


Solution

  • The syntax error is showing up because the previous statement hasn't been terminated. The other answers will work, but in order to do it this way you can either throw a semicolon right before the THROW, or get in the habit of terminating all statements with semicolons.

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

    or

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

    You may have noticed that:

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

    ... will also work, and this is because SQL Server knows that the next thing to come after an IF statement is always a new T-SQL statement.

    It is perhaps worth noting that Microsoft has stated that the T-SQL language in the future will require semicolons after each statement, so my recommendation would be to start building the habit now.