【发布时间】:2010-10-02 08:30:55
【问题描述】:
我见过人们在一批 SQL 代码之间使用 GO 语句,但 AFAICS 不是强制性的(SQL Server 2008)。在批次/组 SQL 语句之间使用 GO 语句有什么好处?
【问题讨论】:
标签: sql sql-server sql-server-2005 sql-server-2008
我见过人们在一批 SQL 代码之间使用 GO 语句,但 AFAICS 不是强制性的(SQL Server 2008)。在批次/组 SQL 语句之间使用 GO 语句有什么好处?
【问题讨论】:
标签: sql sql-server sql-server-2005 sql-server-2008
它们不是严格要求的 - 它们只是 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 行 列名“日期时间戳”无效。
重点是: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 的调用中,它没有任何意义
【讨论】: