sql-server – 如何在带有GO和没有GO语句的SQL Server Management Studio中执行SQL语句?

前端之家收集整理的这篇文章主要介绍了sql-server – 如何在带有GO和没有GO语句的SQL Server Management Studio中执行SQL语句?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的查询
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表.

原文链接:https://www.f2er.com/mssql/78172.html

猜你在找的MsSQL相关文章