加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何在带有GO和没有GO语句的SQL Server Managemen

发布时间:2020-12-12 06:40:14 所属栏目:MsSql教程 来源:网络整理
导读:我有一个简单的查询 CREATE TABLE #tempTable (id int)DROP TABLE #tempTableCREATE TABLE #tempTable (id int)DROP TABLE #tempTable 根据我的理解,在第二部分中,它应该创建#tempTable. 但它显示以下错误 Msg 2714,Level 16,State 1,Line 4 There is already
我有一个简单的查询
CREATE TABLE #tempTable (id int)
DROP TABLE #tempTable

CREATE TABLE #tempTable (id int)
DROP TABLE #tempTable

根据我的理解,在第二部分中,它应该创建#tempTable.

但它显示以下错误

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表.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读