我看到有些人在SQL代码批处理之间使用GO语句,但据我所知,在SQL Server 2008中并不是强制的。使用GO语句在SQL语句的批次/集合之间有什么好处?
这些指令并非必需 - 它们只是 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
。在SQL工具中,只有告诉SSMS批处理的起始和结束位置是强制性的。对于某些语句,如必须作为批处理的第一条语句的CREATE TRIGGER,也需要这样做。
例如,在从C#到SQL Server的调用中,它没有任何意义。