SQL Server : Do I need to use GO statements between batches?

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

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

最佳答案

它们并不是严格必需的 - 它们只是 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

结果:

Msg 207, Level 16, State 1, Line 9 Invalid column name 'datetimestamp'.

要点是:SSMS 尝试立即验证整个语句,但在 SELECT 语句上,它会提示缺少 DateTimeStamp 列。

ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
GO       

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

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

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

关于SQL Server : Do I need to use GO statements between batches?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844962/

相关文章:

sql - 如何使用关键字选择最小值

c# - 为存储过程调用实现线程池

c# - LINQ To SQL 能否检测到表关联中断的位置?

sql - 从单独的日期和时间字段转换为 DATETIME

SQL Server - 事务在错误时回滚?

SQL 在数字字段中搜索非整数

java - 部分记录未插入数据库表中

sql - 在SQL Server中使用IF语句的表值函数

sql - 防止基于序号位置删除 SQL 查询中的行

SQL : in clause in stored procedure:how to pass values