none
Como criar uma view que consulta tabelas em uma base de dados diferente? RRS feed

  • Pergunta

  • Olá, boa tarde. Estou com uma dúvida quanto a questão de criar o código de uma view que precisa consultar informações em uma outra base de dados, já pesquisei em vários sites, mas não ficou muito claro em como devo executar essa view.


    segunda-feira, 9 de dezembro de 2019 19:29

Respostas

Todas as Respostas

  • Ana_Miguel,

    Estas bases de dados estão no mesmo servidor, ou seriam servidores distintos? Se for no mesmo, veja se este exemplo te ajuda:

    Create View V_ConsultarDados
    As
    Select P.CodigoProduto, P.DescricaoProduto,
               F.CodigoFornecedor,
    		   F.NomeFornecedor
    From ERP.dbo.Produtos P Inner Join ESTOQUE.dbo.Fornecedores f
    									      On P.CodigoFornecedor = F.CodigoFornecedor
    Where F.CodigoFornecedor In (1,3,5,7)
    Go
    

    Importante destacar que o usuário que executará a View deverá ter acesso a ambos os bancos de dados, a forma de execução da View basicamente será um comando Select, veja abaixo:

    Select * From V_ConsultarDados
    Order By CodigoFornecedor
    Go


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 9 de dezembro de 2019 19:54
  • Olá Pedro, estão no mesmo servidor, só são bases de dados diferentes. O meu problema é, eu tenho a base de dados A e a base de dados B e preciso 

    que a base B consulte registros que estão nas tabelas da base A.

    segunda-feira, 9 de dezembro de 2019 19:58
  • Deleted
    segunda-feira, 9 de dezembro de 2019 21:40
  • Olá Pedro, estão no mesmo servidor, só são bases de dados diferentes. O meu problema é, eu tenho a base de dados A e a base de dados B e preciso 

    que a base B consulte registros que estão nas tabelas da base A.

    Ana,

    Ok, então é mais tranquilo ainda, veja o exemplo:

    -- Acessando o Banco de Dados B --
    Use BancoDeDadosB
    Go
    
    -- Criando a View --
    Create View V_ConsultarDados
    As
    Select P.CodigoProduto, P.DescricaoProduto,
           F.CodigoFornecedor,
           F.NomeFornecedor
    From BancoDeDadosA.dbo.Produtos P Inner Join BancoDeDadosA.dbo.Fornecedores F
    	   On P.CodigoFornecedor = F.CodigoFornecedor
    Where F.CodigoFornecedor In (1,3,5,7)
    Go
    
    -- Consultando --
    Select * From V_ConsultarDados

    Agora se você estiver no banco de dados A, também poderá executar a View que foi criada no B, veja o exemplo: 

    -- Consultando a View existente no BancoDeDadosB, conectada no BancoDeDadosA --
    Select * From BancoDeDados.dbo.V_ConsultarDados
    Order By CodigoProduto
    Go

    Espero ter ajudado.

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Sugerido como Resposta IgorFKModerator terça-feira, 10 de dezembro de 2019 12:47
    segunda-feira, 9 de dezembro de 2019 21:50
  • Isso mesmo José, preciso criar views dessas tabelas na base A e acessar essas views utilizando a base B. Porém, as tabelas que estavam na base A, já foram recriadas na base B e não existem mais na base A.
    terça-feira, 10 de dezembro de 2019 13:13
  • Deleted
    • Marcado como Resposta Ana_Miguel terça-feira, 10 de dezembro de 2019 14:12
    terça-feira, 10 de dezembro de 2019 13:48
  • Muito obrigada, José! 
    terça-feira, 10 de dezembro de 2019 14:12
  • Ana,

    Além da ótima observação do José Diz, você em que pensar, que o objeto que deseja consultar deve sempre existir, se a View for criada na base B e deseja acessar dados da Base A as respectivas tabelas obrigatóriamente devem existir em A, sendo assim, o contrário será da mesma forma.

    Uma View é uma representação de uma objeto criado lógicamente em um banco de dados que sempre vai fazer acesso a outros objetos que também devem coexistir.

    Esta estrutura inicialmente conhecida como View não armazena dados, a não que ser que a mesma seja criada com o conceito de View Materializada, a qual terá um índice vinculado a ela, e para este caso as colunas relacionadas para este índice acabam exigindo que materialização do dado, ou seja, a view terá em sua estrutura dados amarrados fisicamente a ela, ocupando espaço em disco.

    Em adicional, o índice criado a esta view também estará fisicamente ligado a tabela que possui a coluna ou conjunto de colunas relacionados ao índice.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    terça-feira, 10 de dezembro de 2019 14:56
  • Deleted
    terça-feira, 10 de dezembro de 2019 15:08