none
Como faço para copiar dados de uma view para outra base de dados? RRS feed

  • Pergunta

  • Olá, estou tentando copiar os dados que existem dentro de uma view para outra base de dados, porém só conseguir recriar a view com todos os campos, mas quando tento inserir os dados da view, aparece o seguinte erro:

    OBS: Não estou copiando o campo que contem identificação, só os que tem os dados.

    quinta-feira, 5 de dezembro de 2019 14:26

Todas as Respostas

  • Ana, me parece que o comando que informou está tentando inserir dados diretamente em uma visão e não em uma tabela;  qual é o código SQL da visão VW_AGENTS?

    Verifique na tabela automateconstructs, do banco de dados GrowMonitor_BP, quais colunas são de preenchimento obrigatório


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz quinta-feira, 5 de dezembro de 2019 14:34
    quinta-feira, 5 de dezembro de 2019 14:31
  • Os dados que estão na minha view são esses:

    quinta-feira, 5 de dezembro de 2019 14:39
  • Os dados que estão na minha view são esses:

     

    Esse é o código SQL da visão GrowMonitor_BP.dbo.VW_AGENTS? O código SQL que transcreveu acima acessa a visão VW_WORKFLOWS_AGENTS, agora no banco de dados AutomateEnterprise.

    A mensagem de erro inicial indica uso da tabela automateconstructs do banco de dados GrowMonitor_BP.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    quinta-feira, 5 de dezembro de 2019 14:49
  • Desculpe, esse é o código que está na minha view VW_AGENTS:

    quinta-feira, 5 de dezembro de 2019 14:59
  • Ana, essa visão consulta algumas colunas da tabela AUTOMATECONSTRUCTS e inclusive o conteúdo de ID_AGENT é gerado durante a execução do comando SQL. A mensagem de erro inicial indica que a coluna ResourceType, da tabela AUTOMATECONSTRUCTS, é de preenchimento obrigatório. Observe que essa coluna não faz parte do código SQL da visão VW_AGENTS.

    Para copiar dados de um banco de dados para outro sugiro que não utilize visões como destino mas sim diretamente as tabelas; isto é, cópia de tabela para tabela.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    quinta-feira, 5 de dezembro de 2019 15:06
  • Então devo copiar a tabela que é consultada também?
    quinta-feira, 5 de dezembro de 2019 15:45
  • Ana,

    O que o José Diz esta indicando é realizar a cópia de dados acessando diretamente a Tabela e não a View, uma forma básica de copiar dados de uma tabela e criar outra automaticamente é utilizar o comando Select Into, veja o exemplo:

    -- Criando uma nova tabela através do Select Into --
    Select CodigoProduto, DescricaoProduto, NomeProduto,
           QuantidadeProduto, DataValidadeProduto, DataCadastroProduto
    Into NovaTabelaDeProdutos From Produtos
    Where CodigoProduto BetWeen 1 And 1000
    Order By DataValidadeDesc
    Go

    Este apresentando um simples exemplo, uma forma de você através do comando Select em conjunto com a instrução Into criar uma nova tabela em tempo de execução. Note que estou aplicando um filtro da faixa de dados que deseja selecionar, em adicional um comando Order By para realizar a ordenação dos dados.

    O processo de Insert vai ocorrer exatamente da maneira que os dados serão filtrados e ordenadas, vale ressaltar que este procedimento não leva em consideração a existência de chaves primárias, índices ou demais regras existentes na tabela de origem.

    Por gentileza, veja se isso poderá lhe ajudar.


    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]

    quinta-feira, 5 de dezembro de 2019 16:59
  • Então devo copiar a tabela que é consultada também?

    Ana, eu não sei qual é o serviço em que está envolvida, neste momento. Considerando-se este tópico e outros que postou recentemente, percebo que está a copiar dados de um banco de dados para outro. Entretanto, não sei quais são os critérios: se é uma cópia completa ou se está a ocorrer transformação prévia dos dados, antes de serem gravados na nova base de dados.

    As visões geralmente são utilizadas para retornar informações, mas é possível copiar dados de uma origem (tabela, visão função etc) para uma visão. Entretanto, há alguns requisitos que devem ser atendidos. Como você percebeu neste tópico, no caso específico da visão VW_AGENTS não é possível utilizá-la como destino de dados; somente com fonte.

    O que posso dizer, de forma geral, é que deve utilizar tabelas como destino. Isto é, que o objeto que esteja no INSERT seja uma tabela:

    INSERT into nova tabela (colunas)
      SELECT colunas
        from visão ou tabela ou função;
     

    No caso específico deste tópico, deve-se gravar diretamente na tabela AUTOMATECONSTRUCTS:

    -- código #1
    INSERT into GrowMonitor_BP.dbo.AUTOMATECONSTRUCTS (colunas)
    SELECT colunas
    from AutomateEnterprise.dbo.origem
    where filtro, se houver;
     

    Lembre-se de marcar esta resposta se ela te ajudou a resolver o problema.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz quinta-feira, 5 de dezembro de 2019 17:49
    • Sugerido como Resposta IgorFKModerator quinta-feira, 5 de dezembro de 2019 19:17
    quinta-feira, 5 de dezembro de 2019 17:42