• Instead of inventing the word "beginnator" as the opposite of terminator, how about "initiator"? It's already an English word. Statement initiator vs. statement terminator--I think that sounds reasonable.

    I've seen some confusion as to what constitutes a statement in T-SQL. For example, I've seen this:

    BEGIN TRY;

    -- try block

    END TRY

    BEGIN CATCH;

    -- catch block

    END CATCH;

    There is no semi-colon after END TRY because the parser doesn't allow it. The semi-colons after BEGIN TRY and BEGIN CATCH are empty statements, not statement terminators. Both BEGIN constructs are opening a scope.

    Note that WITH doesn't require a semi-colon on the previous statement if it's the first statement in its scope.

    CREATE PROC try_test AS

    DECLARE @i INT = 2 -- missing a semi colon

    BEGIN TRY

    WITH x AS (SELECT @i AS y)

    SELECT *

    FROM x;

    END TRY

    BEGIN CATCH

    -- do nothing

    END CATCH;

    GO

    EXEC try_test;

    GO

    DROP PROC try_test;

    Of course, you don't want to rely on the beginning of a scope. That declaration should have a semi-colon terminator. But I'm getting tired of seeing "terminators" on BEGIN constructs.