GO ist wie das Ende eines Skripts.
Sie könnten mehrere CREATE TABLE-Anweisungen haben, die durch GO getrennt sind. Es ist eine Möglichkeit, einen Teil des Skripts von einem anderen zu isolieren, aber alles in einem Block einzureichen.
BEGIN und END sind genau wie { und } in C/++/#, Java usw.
Sie banden einen logischen Codeblock. Ich neige dazu, BEGIN und END am Anfang und am Ende einer gespeicherten Prozedur zu verwenden, aber es ist dort nicht unbedingt erforderlich. Wo es notwendig ist, sind For-Schleifen und IF-Anweisungen usw., wo Sie mehr als einen Schritt benötigen ...
IF EXISTS (SELECT * FROM my_table WHERE id = @id)
BEGIN
INSERT INTO Log SELECT @id, 'deleted'
DELETE my_table WHERE id = @id
END