SQL Server:我需要在批处理之间使用GO语句吗?

25
我看到有些人在SQL代码批处理之间使用GO语句,但据我所知,在SQL Server 2008中并不是强制的。使用GO语句在SQL语句的批次/集合之间有什么好处?
2个回答

38

这些指令并非必需 - 它们只是 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

结果为:

消息 207,级别 16,状态 1,在第 9 行 无效的列名 'datetimestamp'。

重点是:SSMS 尝试一次性验证整个语句,但在 SELECT 语句中,它会抱怨缺少 DateTimeStamp 列。

ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
GO       

SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5
如果在这两个语句之间加上一个GO,它就能够工作了,因为SSMS不会提前解析和验证整个语句- 它会执行第一部分,然后只解析第二部分(在 GO 之后)。
但是除了像这样的情况外,几乎从不需要使用 GO

是的,你不能在中间添加列并对其进行操作,但你可以创建表并进行插入而不需要在中间进行,这很奇怪。 - Vadim Zverev
这个功能被称为延迟编译。 - Vadim Zverev

0

在SQL工具中,只有告诉SSMS批处理的起始和结束位置是强制性的。对于某些语句,如必须作为批处理的第一条语句的CREATE TRIGGER,也需要这样做。

例如,在从C#到SQL Server的调用中,它没有任何意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接