none
Insert em outro Banco RRS feed

  • Pergunta

  • Boa tarde Senhores,

    Não tenho experiência com SQL, então estou recorrendo aqui.

    Tenho um banco de dados (SQL Server 2008 R2), que é o oficial, onde tenho varias tabelas, e tenho um novo (SQL Server 2012 Express), onde quero ter apenas uma tabela.

    Tem alguma ferramenta nativa do SQL Server que faça isso? Ou alguma outra forma?

    Agradeço.

    segunda-feira, 6 de janeiro de 2020 20:03

Todas as Respostas

  • JoãoVictor,

    Seja bem-vindos aos atuais fóruns MSDN/TechNet, em breve, estaremos migrando para uma nova plataforma, o que será mais fácil e dinâmico a forma de obter conteúdo e ajuda sobre os produtos Microsoft.

    Pois bem, em relação a sua dúvida, você atualmente esta utilizando para um novo ambiente a versão 2012 Express.

    Existem diversas ferramentas que podemos utilizar para Administrar, Gerenciar e Desenvolver diretamente conectados ao SQL Server, no seu caso, a mais indicada é utilizar o SQL Server Management Studio para ter acesso e poder trabalhar com a sua instância/servidor.

    Algumas dicas para te ajudar:

    1 - Como se conectar ao SQL Server:

    Acesse: https://docs.microsoft.com/pt-br/sql/ssms/f1-help/connect-to-server-database-engine

    2 - Conhecendo o SQL Server Management Studio:

    Acesse: https://docs.microsoft.com/pt-br/sql/ssms/download-sql-server-management-studio-ssms

    3 - Criando uma nova tabela:

    Acesse: https://docs.microsoft.com/pt-br/sql/t-sql/statements/create-table-transact-sql

    ----------------------------------------

    Fico a disposição para 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]

    terça-feira, 7 de janeiro de 2020 01:20
    Moderador
  • Olá João , 

    No seu novo Sql Server (2012 Express) você pretende criar um ambiente de testes com base do seu de produção atual?

    Pergunto pois as versões Express possuem algumas limitações e uma das mais importantes talvez seja o tamanho máximo das bases de dados. 

    Enfim, com o Junior Galvão disse, estamos aqui para ajudar. 

    Comece com a ferramenta do SSMS que o Junior passou e venha nos pergutando as duvidas que forem surgindo.

    Boa sorte!


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    terça-feira, 7 de janeiro de 2020 02:37
  • João Victor, quando comenta que não tem experiência com SQL, refere-se à linguagem SQL ou ao gerenciador de banco de dados SQL Server?

    Você se refere a ter uma única tabela na instância com SQL Server 2012; neste caso pretende reunir várias tabelas em uma única ou somente uma das tabelas que está na instância com SQL Server 2008 R2 será copiada para a instância com o SQL Server 2012 Express?

    O procedimento de transferir dados de um local para outro ocorrerá uma única vez ou é algo que terá que ser processado com frequência?


    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 terça-feira, 7 de janeiro de 2020 10:40
    terça-feira, 7 de janeiro de 2020 10:25
  • Obrigado a todos pela atenção.

    Possuo conhecimento básico no SQL e já utilizo o Management, porém esse insert ou atualização, não tenho conhecimento, vou detalhar o máximo minha dúvida.

    Tenho um Banco onde seu tamanho é de 12gb, então não consigo realizar seu backup e importar no express, e preciso de um ambiente de teste para manipular esses dados, porém só preciso de 1 tabela dessa banco.

    Com isso, instalei o express em minha estação, criei um banco com essa tabela e fiz o insert manual (passei uma tarde dando insert em blocos), porém preciso que seja atualizada diariamente (manual ou automático).

    Imagino que tenha que abrir uma conexão odbc ou fazer um link server, mas nunca fiz isso.

    Mt obg...


    terça-feira, 7 de janeiro de 2020 11:13
  • (...)  e preciso de um ambiente de teste para manipular esses dados, porém só preciso de 1 tabela dessa banco.
    Com isso, instalei o express em minha estação, criei um banco com essa tabela e fiz o insert manual (passei uma tarde dando insert em blocos), porém preciso que seja atualizada diariamente (manual ou automático).

    Ok.

    Como você comentou, uma opção é estabelecer uma vinculação de instâncias entre o computador em que está o servidor e a sua estação de trabalho. No artigo “Programação e otimização de consultas distribuídas” você encontra detalhes sobre o seu caso no item de "bancos de dados em computadores diferentes".

    A vinculação entre instâncias pode ser programada usando a interface gráfica do Management Studio ou então através de comandos T-SQL. No capítulo 3 do artigo há uma explicação detalhada sobre como estabelecer a conexão por T-SQL mas, em resumo, você utiliza provedor OLE DB junto com chamada ao procedimento sp_addlinkedserver:

    -- código #1
    EXECUTE master..sp_addlinkedserver
       @server= N'ORIGEM',
       @srvproduct= N'',
       @provider= N'SQLNCLI',
       @datasrc= N'hostname\instância';

    Substitua hostname pelo nome do computador na rede e instância pelo nome da instância, que geralmente é MSSQLSERVER mas pode ser outro.

    No parâmetro @server você informa com qual nome será feita referência à instância do servidor de banco de dados e em @datasrc você deve informar qual o hostname e o nome da instância do servidor de banco de dados.

    Para a carga inicial de dados da tabela de origem para a tabela local, a forma de utilizar é bem simples:

    -- código #2
    USE nomebancolocal;
    
    TRUNCATE TABLE dbo.tabelalocal;

    INSERT into dbo.tabelalocal (colunas) SELECT colunas from ORIGEM.nomebancoorigem.dbo.tabelaorigem where filtro;

    O que está em itálico deve ser substituído.

    O código #2 copia os dados do servidor de origem para o banco de dados local.

    A leitura atenta do artigo “Programação e otimização de consultas distribuídas” provavelmente esclarecerá as suas dúvidas, mas se permanecer alguma basta perguntar.

     

    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 terça-feira, 7 de janeiro de 2020 12:53
    terça-feira, 7 de janeiro de 2020 12:37
  • Seja bem vindo , Caso os bancos de dados estejam sem servidores diferentes vc precisará fazer um linker server aqui ensina como vc cria, porem para isso diversos conceitos devem ser entendidos , principalmente  transações distribuídas , aqui tem alguns problemas envolvendo trigger com linker server respondidas pelo Mestre @Galvão 

    Caso seja na mesma instancia do sql server , vc precisa criar uma trigger que para cada comando de insert em uma tabela  também fara insert na outra 

    para isso  tem esse artigo aqui que pode te ajudar.

    Wesley Neves - Brasilia-DF

    MCSA-SQL Server 2016
    MTA
    Analista de banco de Dados
    Pós-Graduado em Banco de Dados & BI- SENAC- DF;
    Pós-Graduando em BIG DATA- SENAC- DF;


    "Não tenha sonhos ,tenha meta."

    https://wesleyneves.wordpress.com/

    • Editado Wesley Neves terça-feira, 7 de janeiro de 2020 12:55 e
    terça-feira, 7 de janeiro de 2020 12:53
  • Seja bem vindo , Caso os bancos de dados estejam sem servidores diferentes vc precisará fazer um linker server aqui ensina como vc cria, porem para isso diversos conceitos devem ser entendidos , principalmente  transações distribuídas , aqui tem alguns problemas envolvendo trigger com linker server respondidas pelo Mestre @Galvão 

    Caso seja na mesma instancia do sql server , vc precisa criar uma trigger que para cada comando de insert em uma tabela  também fara insert na outra 

    para isso  tem esse artigo aqui que pode te ajudar.

    Wesley Neves - Brasilia-DF

    MCSA-SQL Server 2016
    MTA
    Analista de banco de Dados
    Pós-Graduado em Banco de Dados & BI- SENAC- DF;
    Pós-Graduando em BIG DATA- SENAC- DF;


    "Não tenha sonhos ,tenha meta."

    https://wesleyneves.wordpress.com/

    Wesley,

    Obrigado pelo elogio Mestre @Galvão, quem me dera ser um mestre, estou tentando, batalhando e estudando sempre.

    Que bom ver você novamente por aqui.


    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, 7 de janeiro de 2020 13:05
    Moderador
  • Com relação à atualização, é fácil de realizar usando a instrução MERGE.

    Uma sugestão de código SQL para atualização diária é o seguinte:

    -- código #3
    MERGE
      into dbo.tabelalocal as D
      using ORIGEM.nomebancoorigem.dbo.tabelaorigem as O
      on O.chave = D.chave
      -- linha foi incluída na tabela de origem
      when not matched by target 
         then INSERT (colunas) 
                values (O.colunas)
      -- linha foi apagada na tabela de origem
      when not matched by source
         then DELETE
    -- verifica se colunas foram alteradas
    when matched and (O.coluna_1 <> D.coluna_1 or O.coluna_2 <> D.coluna_2)
    then UPDATE set coluna_1= O.coluna_1, coluna_2= O.coluna_2;
    O que está em itálico deve ser substituído.

    No item "verifica se colunas foram alteradas" você pode verificar as colunas individualmente. 

     

     

    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 terça-feira, 7 de janeiro de 2020 13:15
    terça-feira, 7 de janeiro de 2020 13:05
  • porém preciso que seja atualizada diariamente (manual ou automático).



    João,

    Uma possibilidade que podemos pensar neste processo de atualização automática, seria o uso de replicação envolvendo o seu SQL Server 2008 enviando dados para o 2012, sabendo que a edição Express pode somente ser assinante de um ambiene de replicação.

    Veja se os links abaixo te ajudam:

    Replicação do SQL Server

    Publicação e Distribuição

    Acredito que para o seu cenário envolvendo versões diferentes e principalmente trabalhando com a edição Express, a replicação transacional pode ser uma alternativa interessante.

    Opções de replicação transacional

    Compatibilidade de replicação com versões anteriores


    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, 7 de janeiro de 2020 13:13
    Moderador
  • Seja bem vindo , Caso os bancos de dados estejam sem servidores diferentes vc precisará fazer um linker server aqui ensina como vc cria, porem para isso diversos conceitos devem ser entendidos , principalmente  transações distribuídas , aqui tem alguns problemas envolvendo trigger com linker server respondidas pelo Mestre @Galvão 

    Caso seja na mesma instancia do sql server , vc precisa criar uma trigger que para cada comando de insert em uma tabela  também fara insert na outra 

    para isso  tem esse artigo aqui que pode te ajudar.

    Wesley Neves - Brasilia-DF

    MCSA-SQL Server 2016
    MTA
    Analista de banco de Dados
    Pós-Graduado em Banco de Dados & BI- SENAC- DF;
    Pós-Graduando em BIG DATA- SENAC- DF;


    "Não tenha sonhos ,tenha meta."

    https://wesleyneves.wordpress.com/

    Wesley,

    Obrigado pelo elogio Mestre @Galvão, quem me dera ser um mestre, estou tentando, batalhando e estudando sempre.

    Que bom ver você novamente por aqui.


    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]

    Obrigado Galvão , Vc e o José são referencias em banco de dados, fico grato em poder ajudar.


    Wesley Neves

    quarta-feira, 8 de janeiro de 2020 12:24