我有一个简单的查询
CREATE TABLE #tempTable (id int) DROP TABLE #tempTable CREATE TABLE #tempTable (id int) DROP TABLE #tempTable
根据我的理解,在第二部分中,它应该创建#tempTable.
@H_502_8@Msg 2714,Level 16,State 1,Line 4
There is already an object named ‘#tempTable’ in the database.
我搜索了原因并发现它是由于查询的两个部分之间的GO语句.因此,正确的查询是
CREATE TABLE #tempTable (id int) DROP TABLE #tempTable GO CREATE TABLE #tempTable (id int) DROP TABLE #tempTable
我还发现GO只是告诉SSMS按顺序在每个批次中发送每个GO之间的sql语句.
我的问题是,sql语句是如何执行的?它不是按顺序执行的吗?
解决方法
sql Server
documentation很好地解释了这一点.
这是如何运作的?没有GO分隔语句,所有语句都是同时编译的.问题是第三个语句是CREATE TABLE语句,表已经存在.所有发生的事情都是解析和编译语句.
使用GO,前两个语句被编译和执行.瞧!第三个语句中没有CREATE表.