现有一个表aa里面记录如下:
序号,代码数据, 单位名称,数据库实体---指数据库名称,有很多个数据库
1    01      五产, wc
2     02      六产, lc
.......
现在每个数据实体都有一个表aa,想用游标提取每个数据库表aa, 就是在
declare dycgjh_cursor cursor LOCAL SCROLL for
select 代码数据, 单位名称,数据库实体 from KDAcctDB.dbo.t_ad_kdAccount_gl
open dycgjh_cursor 
declare @dwfnumber varchar(255)
declare @dwname    varchar(255)
declare @fdbname varchar(255)
WHILE @@FETCH_STATUS = 0
begin
fetch next  from dycgjh_cursor into @dwfnumber,@dwname,@fdbnameuse @fdbname----这个地方报错 
用select * from @fdbname.dbo.aa  -----这样用也报错

解决方案 »

  1.   

    用动态SQL拼接,直接调用不行的。
      

  2.   

    不可以这样,参数不能作为对象名
    可以考虑用视图
    create view V_aa
    as
    begin
    select * from 数据库1.dbo.aa
    union
    select * from 数据库2.dbo.aa
    union
    select * from 数据库3.dbo.aa
    end
    GO
    select * from V_aa
      

  3.   

    主要是数据库在不能增加,用动态SQL拼接,直接调用不行的。 能否把@fdbname定义全局的,在视图中用use @fdbname打开
      

  4.   

    主要是aa表里数据库在不断增加,用动态SQL拼接,直接调用不行的。 能否把@fdbname定义全局的,在视图中用use @fdbname打开 
      

  5.   

    搞定了.select identity(INT,1,1) as fid ,facctname as cacc_name,fdbname as cdbname into  #aa from [KDAcctDB].dbo.[t_ad_kdAccount_gl]
    declare @x int
    set @x=1
    declare @y int
    DECLARE @cdbname varchar(80)
    DECLARE @cacc_name varchar(80)
    DECLARE @sql varchar(500)
    select @y=count(fid) FROM #aa
    WHILE @x<=@y
    begin 
    set @cdbname=''
    select  @cdbname=cdbname FROM  #aa WHERE fid=@x
    select @cacc_name=cacc_name FROM  #aa WHERE fid=@x
    set @sql='select '''+@cacc_name+''' as 数据库名称, * FROM '+@cdbname+'.dbo.t_icitem'exec(@sql) set @x=@x+1 
    end