SQL Server:我是否需要在批次之间使用GO语句?

Cra*_*use 17 sql sql-server sql-server-2005 sql-server-2008

我见过人们在批量的SQL代码之间使用GO语句,但是AFAICS并不是强制性的(SQL Server 2008).批处理/ SQL语句集之间使用GO语句有什么好处?

mar*_*c_s 30

它们并不是严格要求的 - 它们只是SQL Server Management Studio的指令,用于执行到目前为止的语句,然后继续运行.GO不是一个T-SQL关键字或任何东西-它只是在SSMS工作的指令.

有时,您需要GO - 例如,如果您向表中添加列,然后又想要再次选择它,则需要在添加列和查询之间进行GO操作.

例如,如果您尝试执行此操作,您将从SSMS获得错误:

ALTER TABLE (sometable) ADD DateTimeStamp DATETIME

SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5
Run Code Online (Sandbox Code Playgroud)

结果是:

消息207,级别16,状态1,行9无效的列名称'datetimestamp'.

关键是:SSMS正在尝试立即验证整个语句,但在SELECT语句中,它会抱怨缺少的DateTimeStamp列.

ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
GO       

SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5
Run Code Online (Sandbox Code Playgroud)

如果你GO在两个语句之间放置一个,它就会起作用,因为SSMS不会提前解析和验证整个语句 - 它将执行第一部分,然后只解析第二部分(之后GO).

但除了像这样的情况之外,GO几乎不需要.