你的表不是同一个表吧,难道你每一个表的字段数都一样么?
问题应该就在这里吧……
你select的是所有字段,而后面的是固定几个字段……exec('declare sub_cursor cursor for select * from '+@tablename) 
                                          ~~ open sub_cursor
fetch next from sub_cursor into @xm,@xb,@sr,@dh,@sj,@dz,@yb,@ghrq,@pz,@je,@sc,@bz,@lx
~~~~~~~~~~~~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    建议select * 替换成select columnName
      

  2.   

    exec('declare sub_cursor cursor for select * from '+@tablename) 这句话改 
    exec('declare sub_cursor cursor for select columnName1,columnName2.... from '+@tablename) 顺序要和 into 的顺序一样
      

  3.   

    问题应该出在游标上,检查你传递的表的字段,是否与输出参数的个数一样,如果不一样,请写明字段列表:exec('declare sub_cursor cursor for select * from '+@tablename)
      

  4.   

    declare @tablename varchar(100)
    --------------
    sysobjects 資料表中name列的定義為
    name sysname 128 not null
      

  5.   

    declare @tablename varchar(100)
    --------------
    sysobjects 資料表中name列的定義為
    name sysname 128 not null
      

  6.   

    問題應該在這裡
    exec('declare sub_cursor cursor for select * from '+@tablename) 
    open sub_cursor
    fetch next from sub_cursor into @xm,@xb,@sr,@dh,@sj,@dz,@yb,@ghrq,@pz,@je,@sc,@bz,@lx
    因為並不是所有的@tablename字段數都是以下@xm,@xb,@sr,@dh,@sj,@dz,@yb,@ghrq,@pz,@je,@sc,@bz,@lx這麼多
    所以就會產生那種錯誤提示