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

时间:2010-10-02 08:30:55

标签: sql sql-server sql-server-2005 sql-server-2008

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

2 个答案:

答案 0 :(得分:28)

它们并不是严格要求的 - 它们只是指示SQL Server Management Studio执行到目前为止的语句,然后继续运行。 GO 是一个T-SQL关键字或其他任何东西 - 它只是一个在SSMS中有效的指令。

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

E.g。如果您尝试执行此操作,您将从SSMS中收到错误:

ALTER TABLE (sometable) ADD DateTimeStamp DATETIME

SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5

结果:

  

Msg 207,Level 16,State 1,Line 9   列名称'datetimestamp'无效。

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

ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
GO       

SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5

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

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

答案 1 :(得分:0)

只有在SQL工具中才能告诉SSMS批处理开始和结束的位置。某些语句也需要它,例如CREATE TRIGGER,它必须是批处理中的第一个

例如,在c#到SQL Server调用中它没有意义