declare @tmpSql varchar(8000),@tbname varchar(50),@tbfield varchar(50),@chnname varchar(50)
set @tmpSql='select 'declare OpenSql scroll cursor
for
  select tbname,tbfield,chnname 
  from aa 
  order by serialno
open OpenSQl
fetch first from OpenSQl into @tbname,@tbfield,@chnname
while @@fetch_status=0
begin
  Set @tmpSql=@tmpSql+@tbfield+' As '+@chnname+','
  fetch next from OpenSql into @tbname,@tbfield,@chnname
end
Set @tmpSql=@tmpSql+@tbfield+' As '+@chnname
close OpenSql
deallocate OpenSql
--Set @tmpSql=SubString(@tmpSql,1,len(@tmpSql)-1)+' from '+@tbname --
print @tmpSqlexec (@tmpSql)

解决方案 »

  1.   

    ...
    while @@fetch_status=0
    begin
      Set @tmpSql=@tmpSql+@tbfield+' As '+@chnname+','
      fetch next from OpenSql into @tbname,@tbfield,@chnname
    end
    set @tmpSql=left(@tmpSql,len(@tmpSql)-1)--去掉最后一个逗号
    ...
      

  2.   

    应该无法判断是否为最后一行,只能根据fetch的返回值判断是否有记录,建议把上一次fetch的记录保存一下,另外,你可以先select count(*)判断有多上行,再跟踪行数就行了,但这显然有些划不来。
      

  3.   

    declare @tmpSql varchar(8000),@tbname varchar(50),@tbfield varchar(50),@chnname varchar(50)
    set @tmpSql='select 'select @tmpSql=@tmpSql+tbfield+' '+chnname+',' from aa order by serialnoset left(@tmpsql,len(tempsql)-1)
    print @tmpSql即可,不要游标
      

  4.   


    fetch next from 游标名 into 变量名
    while  @@fetch_status=0 
    begin.....
    fetch next from 游标名 into 变量名
    end 
    当@@fetch_status=0 时后面还有记录
    当@@fetch_status<>0时游标到了最后一行的后面。
      

  5.   

    大力,只能用substring截取吗?我已经这样实现了我是想问有没有判断游标滚动到最后一行的标志函数?