none
Copiar conteúdo de um campo entre banco de dados diferentes RRS feed

  • Pergunta

  • Bom dia.

    Gostaria de saber se é possível diretamente no SQL Server copiar o apenas o conteúdo de um campo entre banco de dados diferentes, pois não posso apendar a tabela inteira. Como critério eu usaria o código do cliente.

    DE:
    Banco de dados - Dadosadv_tst (ambiente teste)
    Tabela - SA1010
    Campo - A1_IE

    Para:
    Banco de dados - Dadosadv (ambiente oficial)
    Tabela - SA1010
    Campo - A1_IE

    Não consegui encontrar como resolver isto.

    segunda-feira, 15 de agosto de 2016 12:39

Respostas

  • Macéulus

    Fala para o seu DBA criar uma VIEW que conecta os dois banco de dados, fazendo os campos que você quer.

    Com isso, basta você consultar a VIEW pelo nome dela e pronto.

    Caso contrário, vai ter que criar um link entre os dois bancos e fazer um monte de configurações específicas de DBA como permissão de usuário e tudo mais.

    Uma VIEW resolve fácil o seu problema.

    Outra coisa é fazer como os outros falaram aqui no FORUM mesmo.


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    segunda-feira, 15 de agosto de 2016 15:23

Todas as Respostas

  • sim é possível

    insert into Dadosadv..SA1010(A1_IE)
    
    select 
    
    a.A1_IE
    
    FROM Dadosadv_tst..SA1010 as a 

    lembrando que se existirem outros campos na tabela destino os mesmo serão setados como Null e se existir um campo not null você tera que inserir algum valor nele ou mudar a estrutura da tabela 

     
    segunda-feira, 15 de agosto de 2016 12:51
  • Bom dia Macéulus,

    Os bancos do protheus estão instalados na mesma instância do SQL?

    Se sim, você precisa realizar a replicação da Inscrição Estadual da oficial para a teste?

    Caso não esteja, recomendo que crie um Linked Server entre suas bases.

    Em seguida, você precisará realizar um Update com um inner join, a query ficaria mais ou menos assim:

    Mesma instância (sem linked server)

    UPDATE DADOSADV_TST.dbo.SA1010 SET A1_IE = OFICIAL.A1_IE
    FROM DADOSADV.dbo.SA1010 AS OFICIAL 
    INNER JOIN DADOSADV_TST.dbo.SA1010 AS TESTE ON
    OFICIAL.D_E_L_E_T_ = TESTE.D_E_L_E_T_ AND
    OFICIAL.A1_FILIAL = TESTE.A1_FILIAL AND
    OFICIAL.A1_COD = TESTE.A1_COD AND
    OFICIAL.A1_LOJA = TESTE.A1_LOJA 

    Instâncias diferentes (com linked server)

    UPDATE DADOSADV_TST.dbo.SA1010 SET A1_IE = OFICIAL.A1_IE
    FROM LSOFICIAL.DADOSADV.dbo.SA1010 AS OFICIAL 
    INNER JOIN DADOSADV_TST.dbo.SA1010 AS TESTE ON
    OFICIAL.D_E_L_E_T_ = TESTE.D_E_L_E_T_ AND
    OFICIAL.A1_FILIAL = TESTE.A1_FILIAL AND
    OFICIAL.A1_COD = TESTE.A1_COD AND
    OFICIAL.A1_LOJA = TESTE.A1_LOJA 

    LSOFICIAL foi um nome definido para o linked server, deve ser substituído pelo nome que você utilizar.

    No caso estou considerando que o LS foi criado no server de teste.

    Qualquer dúvida só chamar.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    segunda-feira, 15 de agosto de 2016 12:53
  • Kanaãm, bom dia.

    Não esperava encontrar alguém de Protheus aqui, rs
    Sim, ambos os bancos estão instalados na mesma instância.

    A query (mesma instância) está ao contrario não é? Você fez da oficial para a teste ou entendi errado?

    Preciso jogar o conteúdo do IE da teste para o oficial.

    Abraços!

    segunda-feira, 15 de agosto de 2016 13:27
  • Se é a mesma instância você pode usar a primeira query sem problemas, irá funcionar da forma desejada.

    A ordem do FROM não interfere no caso pois o alias da tabela é utilizado e o campo que está sem Alias assume que a tabela destino é a que está após a cláusula UPDATE.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    segunda-feira, 15 de agosto de 2016 14:57
  • Macéulus

    Fala para o seu DBA criar uma VIEW que conecta os dois banco de dados, fazendo os campos que você quer.

    Com isso, basta você consultar a VIEW pelo nome dela e pronto.

    Caso contrário, vai ter que criar um link entre os dois bancos e fazer um monte de configurações específicas de DBA como permissão de usuário e tudo mais.

    Uma VIEW resolve fácil o seu problema.

    Outra coisa é fazer como os outros falaram aqui no FORUM mesmo.


    Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.

    Mauricio Junior - Comunidade www.ecode10.com

    segunda-feira, 15 de agosto de 2016 15:23
  • Desculpe mas não concordo com tal resposta, visto que as tabelas mencionadas são do banco de dados do ERP Protheus e o mesmo não conseguirá trabalhar com a VIEW mencionada.

    Enfim, apenas gostaria de deixar a observação aqui.

    Obrigado!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    segunda-feira, 22 de agosto de 2016 21:20