1. 作用: 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号. 2. 语法: 一批 Transact-SQL 语句 GO 如 Select 1 Select 2 Select 3 GO 3. 说明: 1) GO 不是 Transact-SQL 语句; 2) 它是 sqlcmd 和 osql 实用工具以及 SQL Server Management Studio 代码编辑器识别的命令. 3) SQL Server 应用程序可以将多个 Transact-SQL 语句作为一个批发送到 SQL Server 的实例来执行.然后,该批中的语句被编译成一个执行计划.程序员在 SQL Server 实用工具中执行特殊语句,或生成 Transact-SQL 语句的脚本在 SQL Server 实用工具中运行时,使用 GO 作为批结束的信号. 4) 如果基于 ODBC 或 OLE DB API 的应用程序试图执行 GO 命令,会收到语法错误.SQL Server 实用工具从不向服务器发送 GO 命令. 4. 权限: GO 是一个不需任何权限的实用工具命令.它可以由任何用户执行. 5. 用法: 1) SQL Server 实用工具将 GO 解释为应该向 SQL Server 实例发送当前批 Transact-SQL 语句的信号.当前批语句由上一 GO 命令后输入的所有语句组成,如果是第一条 GO 命令,则由即席会话或脚本开始后输入的所有语句组成. Select 1 Select 2 Select 3 GO —这是一个批
Select 1 GO Select 2 GO —这是两个批 2) GO 命令和 Transact-SQL 语句不能在同一行中.但在 GO 命令行中可包含注释. Select 1 GO --会正确输出结果,列名为”无列名”
Select 1 GO
--会正确输出结果,列名为”GO” --由此可知此处的GO并未起到应有的作用; 3) 用户必须遵照使用批处理的规则.例如,在同一批处理中,创建数据库之后不能直接使用其新建的数据库.局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用. create database [Roc] use [Roc] GO --运行此批处理后,系统会报错 --把此批处理分成两个批即可正确运行
create database [Roc] GO use [Roc] GO declare @Roc varchar(max) Select @Roc = 'aking' GO print @Roc GO --此为两个批处理,由于局部变量的作用域要限制在一个批处理中,所以此语句错误 --把这两个批合并为一个批即可正确运行 declare @Roc varchar(max) Select @Roc = 'aking' print @Roc GO 4) 不同批处理是分开执行的,一个查询失败不会影响另外一个查询. Select * from 不存在的表 Select 1 --查询执行后会报错,并且不返回任何结果
Select * from 不存在的表 GO Select 1 GO --查询执行会会报错,但会返回Select 1的结果 5) GO [count] count 为正整数.指定GO 之前的批处理执行指定的次数. insert [Roc] Select 'aking' GO --批处理执行1次,向表Roc中插入一行记录
aking Insert [Roc] Select 'aking' GO 10 --批处理执行10次,向表Roc中插入10行记录aking
6. 补充: Select 1 Select * from 不存在的表 Select 3 --查询结果会报错,但会返回Select 1的结果
Select * from 不存在的表 Select 1 Select 3 --查询结果会报错,且不会返回任何查询的结果
Select 1 Select * from 不存在的表 Selec 3 --查询结果会报错,且不会返回任何查询的结果,因为第三条查询语法错误;
Select 1 Select * from 不存在的表 GO Select 3 GO --查询结果会报错,但会返回Select 1 和Select 3的查询结果
Select * from 不存在的表 GO Select 1 Select 3 GO --查询结果会报错,但会返回Select 1 和Select 3的查询结果
Select 1 Select * from 不存在的表 GO Selec 3 GO --查询结果会报错,但会返回Select 1的结果
USE
改变当前操作数据库
用法: USE 数据库名
例: CREATE DATABASE XX1 --创建XX1数据库 ……………… GO CREATE DATABASE XX2 --创建XX2数据库 ……………… GO USE XX1 --转到XX1数据库 GO ………… --对XX1数据库的操作 GO USE XX2 --转到XX2数据库 GO ………… --对XX2数据库的操作 GO
USE在存储过程中不能直接使用 但可以这样用: create proc test as exec('use pubs select * from jobs') --或者exec(use pubs) exec sp_adduser 'xxxx' go
--使用Exec(ute)语句配合USE来改变当前数据库,但数据库环境的更改只在Execute语句结束前有效,所以必须把后面的语句和Execute放到一起
(转自 http://blog.sina.com.cn/s/blog_5623cddb0100ybbx.html http://blog.csdn.net/nphyez/article/details/41939915 )
|
请发表评论