SQL Server:是否需要在批处理之间使用GO语句?
我见过有人在SQL代码批之间使用GO语句,但AFAICS认为这不是SQL Server 2008的强制要求。在SQL语句的批处理/集合之间使用GO语句有什么好处?它们不是严格要求的-它们只是SQL Server Management Studio执行语句的指令,直到现在,然后继续执行。GO不是一个T-SQL关键字或任何东西——它只是一条在SSMS中工作的指令 有时,您需要一个GO-例如,如果您向表中添加一列,然后希望再次选择它,则需要在添加列和查询列之间进行GO 例如,如果您尝试执行此操作,您将从SSM中获得错误:SQL Server:是否需要在批处理之间使用GO语句?,sql,sql-server,sql-server-2005,sql-server-2008,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 例如,如果您尝试执行此操作,您将
ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5
结果:
消息207,16级,状态1,第9行
列名“datetimestamp”无效
关键是:SSMS试图一次验证整个语句,但在SELECT语句上,它会抱怨缺少DateTimeStamp列
如果在这两条语句之间设置GO,它会起作用,因为SSM不会提前解析和验证整个语句—它将完成第一部分,然后只在GO之后解析第二部分
但是,除了这种情况之外,几乎不需要GO。在SQL工具中,只有强制要求告诉SSM批处理的开始和结束位置。对于某些语句(如CREATE TRIGGER)也是必需的,它必须是批处理中的第一个语句
例如,在c到SQL Server的调用中,它没有任何意义是的,您不能添加列并在不进行中间操作的情况下对其进行操作,但您可以创建表并在不进行中间操作的情况下进行插入,这很奇怪。此功能称为延迟编译
ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
GO
SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5