您的位置:首页 > 编程语言 > Go语言

Go 作用

2015-11-21 20:43 447 查看
Go语句的作用是表示一个batch(多条Tsql命令)的结束,并向sql server 提交batch,由于局部变量的作用域是基于batch的,所以,go语句限制局部变量的作用域在一个batch中。

GO 不是Transact-SQL 语句。Go语句通知Microsoft SQL Server实用工具一批Transact-SQL 语句的结束。

在TSQL 脚本中,有时需要将整个脚本分为多个batch,单独发送到sql server去执行。在同一个session中的多个batch是有顺序的,只有当前一个batch执行完成,才能执行下个batch。

一些语句要求有单独的批处理的语句:

1. Create Default

2. Create Procedure

3. Create Rule

4. Create Trigger

5. Create View

注:如果想在单独的脚本中将这些语句组合,则需要通过使用GO语句来将它们分散到各自的批处理中。

1,Go语句限制局部变量的作用域在一个batch中

declare @i int
set @i=1

select @i as i
go

--raise error, exceed variable scope
select @i as i


消息 137,级别 15,状态 2,第 2 行
必须声明标量变量 "@i"。

变量@i的作用域在go执行时,就结束了,sql server抛出错误信息,变量@i没有定义

2,SQL Server 将多个 Transact-SQL 语句作为一个批发送到 SQL Server 执行,该批中的语句被编译成一个执行计划,sql server utility 使用 GO 作为批结束的信号。

3,使用 GO
重复执行batch N次

N 为正整数,指定GO 之前的批处理执行指定的次数。

select 1 as i
go 10


4, 调用Exec命令的Tsql 脚本和Exec执行的Tsql命令不在同一个batch中,由于局部变量是基于batch的,所以调用Exec命令的Tsql脚本不能使用exec执行的Tsql命令中的局部变量,而exec执行的sql命令也不能使用调用方的局部变量。

Exec和调用它的代码都在单独的作用域下运行,也就是说,调用代码不能引用EXEC语句中的变量,并且在调用代码中的变量被解析为用于EXEC语句的字符串之后,EXEC执行的Tsql命令不能引用这些变量。如果需要在动态SQL和调用它的例程间传递值,考虑使用存储过程 sys.sp_executesql。

5,使用批处理建立优先级
在TSQL 脚本中,有时需要将整个脚本分为多个batch,单独发送到sql server去执行。在同一个session中的多个batch是有顺序的,只有当前一个batch执行完成,才能执行下个batch。

CREATE DATABASE db_test
GO

USE db_test
go

CREATE TABLE dbo.dt_test
(
col1 INT,
col2 INT
)


参考文档:
https://msdn.microsoft.com/zh-cn/library/ms188037.aspx http://blog.csdn.net/tjvictor/article/details/5454669
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: