gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:18:06 25 4
gpt4 key购买 nike

我有一个简单的查询

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 的表。

关于sql-server - SQL 语句如何在带有 GO 和不带 GO 语句的 SQL Server Management Studio 中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43913337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com