源代码如下:
数据库 anyisys里面有表anyigl,表里面存储的是数据库名字,有多个
declare @dbname varchar(10)
declare @str varchar(5000)
declare @str1 varchar(5000)
declare cur_anyisys cursor for select dbname from anyisys.dbo.anyigl
open cur_anyisys
fetch next from cur_anyisys into @dbname
while @@fetch_status=0
begin
set @str='use '+@dbname
set @str1=@str+' update gl_pznr '
set @str1=@str1+' set gl_pznr.fzsm8=fz2.jjdm '
set @str1=@str1+' from anyisys.dbo.fz2 as fz2 '
set @str1=@str1+' where gl_pznr.kmdm=fz2.kmdm and gl_pznr.gsdm='''' and gl_pznr.kjqj like ''2006%'' and gl_pznr.kmdm like ''5%'' and gl_pznr.kjqj<=''200606'' '
-- select @str1
-- execute(@str1)
fetch next from cur_anyisys into @dbname
end
close cur_anyisys
deallocate cur_anyisys功能就是实现gl_pznr与fz2里面的kmdm相等,并且满足一些条件的进行gl_pznr.fzsm8=fz2.jjdm ,但是如果长度太大,那么 @str1就显示不了了,求解

解决方案 »

  1.   

    每执行完一次游标后select @str1 = ''或分多个变量存@str1,每个存8000字符,然后exec(@str1+@str2+...+@strn)
      

  2.   

    那@str1还是超过怎么办?
    这不是无解嘛,呵呵
      

  3.   

    楼主那个游标中每执行完一次就存在一个变量中,再执行一次存到下一个变量中,最后将几个变量组合在一起exec.但看楼主那个需求完全可以不用这么做,执行一次游标就exec一次呗,干嘛最后要一起执行啊!
      

  4.   

    行了,就是用了几个 @str1,@str2,@str3,最后 exec(@str1+@str2+@str3),没有问题,我这样做就是想用 select @str1+@str2+@str3,这样方便我查询错误,呵呵,不过select出来的结果还是不全,但是 exec没有问题,谢谢啦,分数马上加上