--分析器会先分析下一个go前的所有代码,然后再执行,就算最后一步错,也会回滚到第一个语句的状态,换句话说,就是分析器会把go之间的语句作为一个事务,有错误的话会回滚到上一go之前。
--可以在分析器下运行以下代码
create table temp(myint int)
go --当这个go和下面的那个go没有的话,虽然这个语句正确,但是由于下面出错,这个表也不会创建的,
--当只有这个go,没有下面的那个go的话,表temp会被创建,即使下面的语句出错。
create function myfuntion(@int int)
returns varchar(100)
as
begin
declare @intvar varchar(100)
set @intvar = 'asdfasd'
return @intvar
end
go --没有这个go的话语句会出错,有这个go的话function会先被创建,下面的语句才能被执行
select [sdaf]= dbo.myfuntion(2)
drop function myfuntion
drop table temp
另一个例子
create table temp(myint int)
GO
insert tblTemp1 values ('1','2','a')
GO
create table temp2(myint int)
insert tblTemp1 values ('1','2','a')
--insert tblTemp values ('1','2')
create table temp3(myint int)
GO
心得:
批处理如果遇到编译错误,整个批处理都不会执行;
遇到运行错误,本批处理中运行错误点前面的执行步骤会生效,运行错误点后面的语句不会执行。
本批处理块中的错误不会影响到其他批处理块的执行!
如果脚本没有一个GO语句,表示整个一段脚本块都是一个批处理块!
有疑问加站长微信联系(非本文作者)