exec('declare @tablename char(10)
select @tablename='yy20021025'
declare yyCur cursor for
select kh,jylx,ckjh,clsj,cc from '+@tablename+' where scbz=0
for read only.....')

解决方案 »

  1.   

    exec里面的sql string是一个事务,所以你定义的表变量必须得和select一起定义,就是CrazyFor(Fan) 的方法
      

  2.   

    改为:
    exec('declare @tablename char(10)
    select @tablename='yy20021025'
    declare yyCur cursor for
    select kh,jylx,ckjh,clsj,cc from '+@tablename+' where scbz=0
    for read only')因为exec('...')是一个独立的匿名存储过程,你必须保证它的完整!如:
    exec('
    declare @aa int;
    set @aa=1;
    select @aa
    ')
    select @aa
    ------^^^^报错!
      

  3.   

    要exec('declare @tablename char(10)
    select @tablename=''yy20021025''')才行运行 exec('declare @tablename char(10)
    select @tablename='yy20021025'
    declare yyCur cursor for
    select kh,jylx,ckjh,clsj,cc from '+@tablename+' where scbz=0
    for read only')
    会提示 'yy20021025' 附近有语法错误
      

  4.   

    最好就是这样:
    declare @TableName varchar(200)
    declare @Sql varchar(200)
    set @TableName = 'Medicineinfo'
    set @Sql='select * from ' +@TableName
    exec(@Sql)
    楼上几种写法有点错误
    当然解释是对的
      

  5.   

    不好意思,我没按照你的内容写
    如下:
    declare @tablename char(10)--最好用varchar
    declare @Sql varchar(200)
    select @tablename='yy20021025'
    set @Sql='select kh,jylx,ckjh,clsj,cc from '+@tablename+' where cbz=0 '
    declare yyCur cursor for
    exec(@Sql)
    for read only
      

  6.   

    可以尝试用系统存存储过程sp_executesql来执行动态SQL,它的执行效率要比你直接用exec('')高,而且可靠