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?