none
Pesquisar nome de tabelas em uma base de dados, servindo de variável para outra consulta RRS feed

  • Pergunta

  • Pessoal estou pesquisando, com um cursor, nomes de tabelas que comecem com '455' em um banco de dados (Ex.: dwTre) e jogando os nomes que encontro em uma variável, pois necessito fazer uma soma de uma coluna que está nesta tabela em outro banco de dados (Ex.: dwCont). Meu problema reside em como fazer menção a outro banco de dados.

    Em linhas gerais:

    DECLARE MyCursor CURSOR FAST_FORWARD FOR
    SELECT [name]
    FROM [dwTre].[dbo].[DWFileCabinet]
    WHERE [name] like '455%'

    OPEN MyCursor 
    FETCH NEXT FROM MyCursor 
    INTO @Nome

    WHILE @@FETCH_STATUS = 0
    BEGIN

    Print @Nome

                    // FAZER O SELECT SUM() NESTE PONTO EM OUTRO BANCO DE DADOS


    FETCH NEXT FROM MyCursor 
    INTO @Nome

    END

    CLOSE MyCursor
    DEALLOCATE MyCursor

    Espero ter sido claro.

    Valeu.

     
    sexta-feira, 16 de junho de 2017 15:33

Todas as Respostas

  • Becker,

    Como assim não esta conseguindo fazer a menção ao outro banco de dados? Você tem permissão de acesso?

    No select que você estará utilizando dentro do cursor será necessário informar o nome completo para poder localizar as tabelas, como por exemplo:

    Select col1, col2, col3 from nomedobanco.nomedoowner.nomedatabela


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 21 de junho de 2017 01:05
  • Olá Júnior.

    Estou fazendo o seguinte:

     

    Declare @X       as Date
    Declare @Tabela  as Varchar(30) -- Variável para definir quais tabelas pesquisar
    Declare @Nome    as Varchar(60) -- Variavel para armazenar o Nome da tabela
    Declare @Nome2   as Varchar(60) -- Variavel para armazenar o Nome da tabela
    Declare @Val     as Integer

    Set @X      = '30/06/2017'
    set @Tabela = '045%'

    /************* INICIO CURSOR *************/
    DECLARE MyCursor CURSOR FAST_FORWARD FOR
    SELECT [name]
    FROM   [dwsystem_NTI].[dbo].[DWFileCabinet]
    WHERE  [name] like @Tabela
    ORDER BY [name]

    OPEN MyCursor 

    FETCH NEXT FROM MyCursor INTO @Nome

    SET   @Nome2 = '[dwdata].[dbo].[' + @Nome + ']'

    WHILE @@FETCH_STATUS = 0
    BEGIN

    print @Nome2

    SELECT Sum([DWPAGECOUNT])
    FROM   @Nome2 
    WHERE  [DWSTOREDATETIME] <= @X

    FETCH NEXT FROM MyCursor INTO @Val

    SET  @Nome2 = '[dwdata].[dbo].[' + @Nome + ']'

    Print @Val

    END

    CLOSE MyCursor
    DEALLOCATE MyCursor

    E o erro que aparece é:

    Mensagem 1087, Nível 16, Estado 1, Linha 30
    É necessário declarar a variável de tabela "@Nome2".

    sexta-feira, 23 de junho de 2017 17:14
  • Becker,

    Você não pode utilizar uma variável na linha do comando Select da maneira que você esta querendo, para isso funcionar seria necessário trabalhar com o conceito de query dinâmica.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sábado, 24 de junho de 2017 00:29