Sql批处理GO的作用
--分析器会先分析下一个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语句,表示整个一段脚本块都是一个批处理块! |
|