使用游标可能解决,具体你可以语句你可以查看SQL帮助。

解决方案 »

  1.   


    declare @sql varchar(8000)set @sql=''select @sql=@sql+' union all select * from ['+实例名称+'].dbo.table' from table1set @sql=stuff(@sql,1,11,'')exec(@sql)
      

  2.   

    使用如下语句,可是返回错误:
    ======================================================================================
    DECLARE CompanyCursor CURSOR FOR 
    SELECT instance
    FROM [yyyyy].dbo.Dimcompany
    OPEN CompanyCursor 
    declare @i int
    set @i=1
    declare @instance as varchar(17)
    fetch next from CompanyCursor into @instance
    while @i<100
    begin insert into [yyyyy].dbo.Itemtest
    SELECT 
      FItemID
    , FItemClassID
    , FName 
    , str(@instance) as Company
    FROM [xxxxxx].[@instance].dbo.t_Item
    fetch next from CompanyCursor into @instance
    set @i=@i+1
    end
    close CompanyCursor
    deallocate CompanyCursor
    ======================================================================================
    返回错误:
    消息 7314,级别 16,状态 1,第 12 行
    链接服务器 "xxxxxx" 的 OLE DB 访问接口 "SQLNCLI" 不包含表 ""@instance"."dbo"."t_Item""。该表不存在,或者当前用户没有访问该表的权限。
    当然,权限是有的,就是"FROM [xxxxxx].[@instance].dbo.t_Item"这部分可能存在错误。
    请问该如何解决呢?
      

  3.   

    没那么容易, 想用@instance来表示数据库名, 只有在动态SQL里才能实现.
      

  4.   

    我使用了动态SQL,
    =======================================
    DECLARE CompanyCursor CURSOR FOR  
    SELECT instance 
    FROM [yyyyy].dbo.Dimcompany 
    OPEN CompanyCursor  
    declare @i int 
    set @i=1 
    declare @instance as varchar(17) 
    fetch next from CompanyCursor into @instance 
    while @i <100 
    begin 
    Exec(
    'insert into [yyyyy].dbo.Itemtest 
    SELECT  
      FItemID 
    , FItemClassID 
    , FName  
    , ' + (@instance) + ' as Company 
    FROM [xxxxxx].[ ' + @instance + ' ].dbo.t_Item

    fetch next from CompanyCursor into @instance 
    set @i=@i+1 
    end 
    close CompanyCursor 
    deallocate CompanyCursor =======================================
    但是,又报:列名'xxxxxxx'无效
    如果把' + (@instance) + ' 改成:'' + (@instance) + ''
    那么原本希望是实例名的那一列,全部都变成“+ (@instance) +”被插进了表中。请问又将如何修改呢?谢谢!
      

  5.   

    出来了,将“' + (@instance) + '”改成“''' + (@instance) + '''”就可以了!
    谢谢!