How SQL statements execute in SQL Server Management Studio with GO and without GO statement?

sql-server, ssms, t-sql

Solution

The SQL Server documentation does a pretty good job of explaining this.

In your particular case, the issue is compile-time errors versus execution-time errors.

How does this work? Without a `GO` separating the statements, all are compiled at the same time. The problem is that the third statement is a `CREATE TABLE` statement and the table already exists. All that is happened is that the statements are parsed and compiled.

With the `GO`, the first two statements are compiled and executed. Voila! There is no table for the `CREATE` in the third statement.

Problem

I have a simple query ``` CREATE TABLE #tempTable (id int) DROP TABLE #tempTable CREATE TABLE #tempTable (id int) DROP TABLE #tempTable ``` From my understanding, in the second part, it should create the `#tempTable`. But it shows the following error Msg 2714, Level 16, State 1, Line 4 There is already an object named '#tempTable' in the database. I have searched for the reason and found that it is because of a `GO` statement between the two part of the query. Therefore, the correct query is ``` CREATE TABLE #tempTable (id int) DROP TABLE #tempTable GO CREATE TABLE #tempTable (id int) DROP TABLE #tempTable ``` I have also found that `GO` just tells SSMS to send the SQL statements between each `GO` in individual batches sequentially. My question is, how are SQL statements executed? Is it not executed sequentially? If it executes sequentially, then why does my first query cause an error?

Original source