首页 > 其他 > 详细

Go 作用

时间:2015-11-21 21:11:01      阅读:305      评论:0      收藏:0      [点我收藏+]

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 [N] 重复执行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

 

Go 作用

原文:http://www.cnblogs.com/ljhdo/p/4984644.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!