Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:是否需要在批处理之间使用GO语句?_Sql_Sql Server_Sql Server 2005_Sql Server 2008 - Fatal编程技术网

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

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 例如,如果您尝试执行此操作,您将

我见过有人在SQL代码批之间使用GO语句,但AFAICS认为这不是SQL Server 2008的强制要求。在SQL语句的批处理/集合之间使用GO语句有什么好处?

它们不是严格要求的-它们只是SQL Server Management Studio执行语句的指令,直到现在,然后继续执行。GO不是一个T-SQL关键字或任何东西——它只是一条在SSMS中工作的指令

有时,您需要一个GO-例如,如果您向表中添加一列,然后希望再次选择它,则需要在添加列和查询列之间进行GO

例如,如果您尝试执行此操作,您将从SSM中获得错误:

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