用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))
BeginUpdate TableA Set Modification_Num=Modification_Num+1 Where tmpid=@Count
Set @Count=@Count+1ENDPrint @CountAlter table TableA Drop column tmpid

解决方案 »

  1.   

    --alter 语句后加go即可,如下:
    Alter table TableA Add tmpid bigint IDENTITY (1, 1) NOT NULL
    goDeclare @Count Bigint
    Declare @BillRowID varchar(50)Select @Count=MIN(tmpid) From TableA
    While (@Count<=(Select Max(tmpid) From TableA))
    BeginUpdate TableA Set Modification_Num=Modification_Num+1 Where tmpid=@Count
    Set @Count=@Count+1ENDPrint @CountAlter table TableA Drop column tmpid
    go
      

  2.   

    --如果在存储过程中执行,需要用动态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))
    BeginUpdate TableA Set Modification_Num=Modification_Num+1 Where tmpid=@Count
    Set @Count=@Count+1ENDPrint @Count
    set @sql = 'Alter table TableA Drop column tmpid '
    exec (@sql)
    go
      

  3.   

    加一个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 NULLgo
    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+1END
    goAlter table TableA Drop column tmpid
      

  4.   

    GO 用信号通知 Microsoft&reg; SQL Server&#8482; 实用工具一批 Transact-SQL 语句的结束。 
    注释 GO 不是 Transact-SQL 语句;
    而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。
      

  5.   

    是这样的,在DML与DDL语言的操作之间要用go语句来实现.
    首先要说明的是:不是执行顺序的问题,sql是按照顺序来执行的.其次让我来给你解释为什么为提示这样的错误.
    在你运行修改表的语句,如果加上go语句,上面的这修改表的语句就是当作一个批处理来执行,而后面的语句就是另外一个批处理,引擎会先执行上面的,在执行下面的.所以第一句前面加上go,不会有错误.但是如果你没有加上go语句,引擎就把你整个查询窗口当作是一个批处理,引擎先会对你整个批处理进行操作之前语法的检查,此时你的修改表的语句还没有执行,而她会检查到你的查询语句中的tempid不在表里头,这样他当然会提示错误了.所以我们如果在执行DDL语句的时候,最好后面加个go,
      

  6.   

    不是最好加go,而是必须加go或者用动态SQL处理。