ALTER    proc addnew
@type tinyint,
@gzid nchar(3),
@gzname nvarchar(16),
@depend nvarchar(360),
@express nvarchar(1000)
as
declare @mystr nvarchar(100)if @type=0
insert Pay(GZ_ID,GZ_name,GZ_State) values(@gzid,@gzname,0)
else if @type=1
insert Pay(GZ_ID,GZ_name,GZ_depend,GZ_Express,GZ_State) values(@gzid,@gzname,@depend,@express,0)if @@error<>0
  return -1
set @mystr=N'ALTER TABLE Mpinfo add ' + @gzid+' '+'decimal(13,2) null'
exec (@mystr)return 1

解决方案 »

  1.   

    请教 这样可以回滚的吗?
    我怕增加A记录以后 出现异常出错, B表中没有增加字段
    是否可回滚 在代码回滚懂 在SQL写回滚就不会了!
      

  2.   

    你这里没有必要用回滚,你只有一条语句执行,回滚是: rollback 。你这里直接return就可以了
      

  3.   

    你一句话也用rollback吗?
    ALTER    proc addnew
    @type tinyint,
    @gzid nchar(3),
    @gzname nvarchar(16),
    @depend nvarchar(360),
    @express nvarchar(1000)
    as
    declare @mystr nvarchar(100)SET XACT_ABORT on 
    begin tranif @type=0
    insert Pay(GZ_ID,GZ_name,GZ_State) values(@gzid,@gzname,0)
    else if @type=1
    insert Pay(GZ_ID,GZ_name,GZ_depend,GZ_Express,GZ_State) values(@gzid,@gzname,@depend,@express,0)if @@error<>0
      return -1
    set @mystr=N'ALTER TABLE Mpinfo add ' + @gzid+' '+'decimal(13,2) null'
    exec (@mystr)commit tranreturn 1
      

  4.   

    ALTER    proc addnew
    @type tinyint,
    @gzid nchar(3),
    @gzname nvarchar(16),
    @depend nvarchar(360),
    @express nvarchar(1000)
    as
    declare @mystr nvarchar(100)set @mystr=N'ALTER TABLE Mpinfo add ' + @gzid+' '+'decimal(13,2) null'SET XACT_ABORT on 
    begin tranif @type=0
    insert Pay(GZ_ID,GZ_name,GZ_State) values(@gzid,@gzname,0)
    else if @type=1
    insert Pay(GZ_ID,GZ_name,GZ_depend,GZ_Express,GZ_State) values(@gzid,@gzname,@depend,@express,0)
    exec (@mystr)commit tranreturn 1