我见过人们在批量的SQL代码之间使用GO语句,但AFAICS并不是强制性的(SQL Server 2008)。批处理/ SQL语句集之间使用GO语句有什么好处?
答案 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调用中它没有意义