在数据库中 执行下列sql语句是没问题的ALTER TABLE Diary ADD tempid int 
go
UPDATE Diary set tempid = DiaryId 
go
ALTER TABLE Diary DROP COLUMN DiaryId但是如果把这个sql语句用ADO.net执行就会出错求解

解决方案 »

  1.   

    其实GO去掉也不碍事的,那个可以理解为多于的。
    你在ADO.NET里执行带GO的语句,好比把用GO分割的多个语句单独执行,上述语句2个GO,那么相当于让ADO.NET单独顺次执行了三个独立的语句,如果觉得麻烦,而三个语句合并到一起执行也不会出错(一般不会出错),那为什么要分开呢?
      

  2.   

    去掉go的话 执行第二句的时候 会找不到刚刚加入的tempid列
      

  3.   

    改成分号我也试了  也不行  其实语句执行了 就是刚刚加入的tempid找不到  提示tempid 列无效   我估计应该是sql server 默认 启动了一个事务吧
    但我目前就想用一个SqlCommand ,执行分成三个SqlCommand 执行时没问题的 我试过了 希望高手指点
      

  4.   

    执行三次吧. 其实你的语句本身就执行了3次ALTER TABLE Diary ADD tempid int 
    go 执行 
    UPDATE Diary set tempid = DiaryId 
    go 执行
    ALTER TABLE Diary DROP COLUMN DiaryId 
    go 执行毕竟是个文本,ado.net不可能附带那么大的解析功能
      

  5.   

    GO既不是标准SQL也不是T-SQL语句...它仅仅是sqlcmd和osql及SQL Server Management Studio代码编辑器等SQL Server工具识别的命令,实际上和SQL Server都没有关系更别提其他DBMS...ADO.NET没有任何理由支持GO...把你的语句分多次执行...
      

  6.   

    string sql="ALTER TABLE Diary ADD tempid int ;UPDATE Diary set tempid = DiaryId ;ALTER TABLE Diary DROP COLUMN DiaryId "
      

  7.   

    使用 UpdateBatchSize 属性
      

  8.   

    在 查询分析器是没关系  
    但是用cmd.ExecuteNonQuery()就是不行
      

  9.   

    go不是T-SQL的一部分;
    两种方案解决:
    1、将你要执行的sql批处理写成存储过程,用ADO.NET调用这个存储过程。
    2、用ADO.NET的事务来分步执行你要执行的SQL操作。