查询分析器执行2段脚本是顺序执行么?
用mssql2000,查询分析器; 
 下面几段脚本,是用来临时处理数据用的,发现第一句Alter   ........生成tmpid字段的语句和后面的语句一同选中执行,就提示出错,列名tmpid无效;单独选中执行一下,再执行后面的sql脚本,就没事儿,不明所以,请教一下。好像查询分析器是在并发执行第一条和后面几条语句? 
 Alter   table   TableA   Add   tmpid   bigint   IDENTITY   (1,   1)   NOT   NULL     
 Declare   @Count   Bigint 
 Declare   @BillRowID   varchar(50)   
 Select   @Count=MIN(tmpid)   From   TableA 
 While   (@Count <=(Select   Max(tmpid)   From   TableA)) 
 Begin   
 Update   TableA   Set   Modification_Num=Modification_Num+1   Where   tmpid=@Count 
 Set   @Count=@Count+1   
 END   
 Print   @Count     
 Alter   table   TableA   Drop   column   tmpid
------解决方案----------------------alter 语句后加go即可,如下:     
 Alter table TableA Add tmpid bigint IDENTITY (1, 1) NOT NULL 
 go   
 Declare @Count Bigint 
 Declare @BillRowID varchar(50)   
 Select @Count=MIN(tmpid) From TableA 
 While (@Count <=(Select Max(tmpid) From TableA)) 
 Begin   
 Update TableA Set Modification_Num=Modification_Num+1 Where tmpid=@Count 
 Set @Count=@Count+1   
 END   
 Print @Count     
 Alter table TableA Drop column tmpid 
 go
------解决方案----------------------如果在存储过程中执行,需要用动态SQL来添加或drop列,如下: 
 --因为存储过程中间的代码不能带go。   
 declare @sql varchar(1000)   
 set @sql= 'Alter table TableA Add tmpid bigint IDENTITY (1, 1) NOT NULL ' 
 exec (@sql)   
 Declare @Count Bigint 
 Declare @BillRowID varchar(50)   
 Select @Count=MIN(tmpid) From TableA 
 While (@Count <=(Select Max(tmpid) From TableA)) 
 Begin   
 Update TableA Set Modification_Num=Modification_Num+1 Where tmpid=@Count 
 Set @Count=@Count+1   
 END   
 Print @Count     
 set @sql =  'Alter table TableA Drop column tmpid  ' 
 exec (@sql) 
 go 
------解决方案--------------------加一个go就行了 
 create table TableA(name varchar(20)) 
 insert TableA select  'aaa ' 
 insert TableA select  'bbb ' 
 insert TableA select  'ccc '   
 drop table TableA     
 Alter table TableA Add tmpid bigint IDENTITY (1, 1) NOT NULL   
 go 
 Declare @Count Bigint 
 Declare @BillRowID varchar(50)   
 Select @Count=MIN(tmpid) From TableA 
 While (@Count <=(Select Max(tmpid) From TableA)) 
 Begin 
 print @Count 
 --Update TableA Set Modification_Num=Modification_Num+1 Where tmpid=@Count 
 Set @Count=@Count+1   
 END     
 go   
 Alter table TableA Drop column tmpid 
------解决方案--------------------GO 用信号通知 Microsoft® SQL Server™ 实用工具一批 Transact-SQL 语句的结束。  
 注释 GO 不是 Transact-SQL 语句; 
 而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。
------解决方案--------------------是这样的,在DML与DDL语言的操作之间要用go语句来实现.     
 首先要说明的是:不是执行顺序的问题,sql是按照顺序来执行的.   
 其次让我来给你解释为什么为提示这样的错误. 
 在你运行修改表的语句,如果加上go语句,上面的这修改表的语句就是当作一个批处理来执行,而后面的语句就是另外一个批处理,引擎会先执行上面的,在执行下面的.所以第一句前面加上go,不会有错误.但是如果你没有加上go语句,引擎就把你整个查询窗口当作是一个批处理,引擎先会对你整个批处理进行操作之前语法的检查,此时你的修改表的语句还没有执行,而她会检查到你的查询语句中的tempid不在表里头,这样他当然会提示错误了.   
 所以我们如果在执行DDL语句的时候,最好后面加个go,