【问题标题】:T-SQL, why do we write GOT-SQL,我们为什么要写 GO
【发布时间】:2020-02-15 22:05:32
【问题描述】:

为什么这段代码中有两个 GO?当查询只需要运行一次时,为什么我们需要包含它?

USE AdventureWorks2016;
GO

SELECT 
    Ord.SalesOrderID, Ord.OrderDate,
    (SELECT MAX(OrdDet.UnitPrice)
     FROM Sales.SalesOrderDetail AS OrdDet
     WHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice
FROM Sales.SalesOrderHeader AS Ord;
GO

【问题讨论】:

  • GO 不是 T-SQL 关键字,它被 IDE(例如 SSMS)用作批处理分隔符。某些命令必须是批处理中的唯一语句(例如创建一个 SP)。这使您可以轻松地一个接一个地运行多个批次。它还会清除变量之类的东西,这些变量只在声明它们的批次中持续存在。
  • @Larnu:好吧,你说的批处理分隔符是什么意思? Som我可以看到代码块结束了吗?
  • 不,那是语句终止符 (;)。
  • @Larnu:好的,谢谢,但还是有点困惑,因为我不明白你所说的批处理是什么意思......

标签: sql sql-server tsql ssms


【解决方案1】:

如果有帮助,GO 会隔离每个批次

例如

Declare @v int = 25
Select @V;

go

Select @v ;

第一个 SELECT 执行良好并返回 25,而第二个抛出错误

【讨论】:

  • 为什么会抛出错误?因为变量没有了?所以通常或大多数情况下,我们在 ;? 之后包含 GO?
  • @David 认为 (at)v 现在在 GO 之后超出范围
猜你喜欢
  • 2016-01-23
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多