SQL GO命令

SQL GO命令

SQL Server提供的命令不是Transact-SQL语句,但可以由sqlcmd和osql实用程序以及SQLServerManagementStudio代码编辑器识别。这些命令可用于促进批处理和脚本的可读性和执行。

GO向SQL Server实用程序发出一批Transact-SQL语句的结束信号。

语法:

GO [count]  

参数说明:

  • count 是一个正整数。GO之前的批处理将执行指定的次数。

备注:

  • GO不是Transact-SQL语句;它是sqlcmd和osql实用程序以及sqlserver management studio代码编辑器识别的命令。
  • SQL Server实用工具将GO解释为应将当前批Transact-SQL语句发送到SQL Server实例的信号。当前的语句批由自上次执行后输入的所有语句组成,如果这是第一次执行,则是自特别会话或脚本开始以来输入的所有语句。
  • Transact-SQL语句不能与GO命令占用同一行。但是,该行可以包含注释。
  • 用户必须遵循批处理规则。例如,在批处理中第一个语句之后执行存储过程时,必须包含EXECUTE关键字。局部(用户定义)变量的范围仅限于批处理,不能在GO命令后引用。
USE AdventureWorks2012;  
GO  
DECLARE @MyMsg VARCHAR(50)  
SELECT @MyMsg = 'Hello, World.'  
GO -- @MyMsg is not valid after this GO ends the batch.  
  
-- Yields an error because @MyMsg not declared in this batch.  
PRINT @MyMsg  
GO  
  
SELECT @@VERSION;  
-- Yields an error: Must be EXEC sp_who if not first statement in   
-- batch.  
sp_who  
GO

SQL Server应用程序可以将多个Transact-SQL语句发送到SQL Server实例以批处理方式执行。然后将批处理中的语句编译为单个执行计划。程序员在SQL Server实用程序中执行即席语句,或构建Transact-SQL语句的脚本以在SQL Server实用程序中运行时,使用GO发出批处理结束的信号。

基于ODBC或oledbapi的应用程序在尝试执行GO命令时会收到语法错误。SQL Server实用工具从不向服务器发送GO命令。

在GO之后不要使用分号作为语句结束符。

下面的示例创建两个批。第一批只包含一个useadventureworks2012语句来设置数据库上下文。其余语句使用局部变量。因此,所有局部变量声明必须分组在一个批中。这是通过在引用变量的最后一个语句之后才使用GO命令来完成的。

USE AdventureWorks2012;  
GO  
DECLARE @NmbrPeople int  
SELECT @NmbrPeople = COUNT(*)  
FROM Person.Person;  
PRINT 'The number of people as of ' +  
      CAST(GETDATE() AS char(20)) + ' is ' +  
      CAST(@NmbrPeople AS char (10));  
GO

下面的示例执行批处理中的语句两次。

SELECT DB_NAME();  
SELECT USER_NAME();  
GO 2

  

结语:在执行SQL语句时,GO相当于一个结束符或断句,要分别执行对应的语句,而不能同时执行。 --2020.09.16

创建时间:2020.09.16  更新时间:

博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你所有帮助,谢谢!
原文地址:https://www.cnblogs.com/guorongtao/p/13677831.html