none
Copiar linha de uma tabela para outra.

    Question

  • Bom dia a todos!

    Meus caros, sou novo aqui e não sei se já existe algum post com esta dúvida (pesquisei e não encontrei).

    Bom, vou explicar-lhes o que se passa:

    Tenho 2 servidores conectados em rede e ambos possuem banco de dados. Nos bancos existem uma tabela de mesmo nome e campos. O Servidor 1 está rodando e atualizando a tabela Estoque diariamente enquanto que o Servidor 2 está parado há alguns meses. O que quero é copiar apenas uma linha da tabela Estoque do
    Servidor 1 para a tabela estoque do Servidor 2.

    Conto com o apoio de todos.

    SDS.
    Thursday, November 13, 2008 2:46 PM

Answers

  • Mecinho,

     

    Você pode fazer da forma que mostrei. No entanto, usando update com Join ao invés de insert.

     

    Agora, qual o campo que identifica cada linha de sua tabela? Chave primaria?

     

    Seguido do meu post acima, o Update ficaria +- assim:

     

    Estando no srv1:

     

    Code Snippet

    select * into #srv2 from srv2.nomeBanco.dbo.estoque;

    GO

     

    UPDATE
       estoque
    SET
       estoque.quantidade = #srv2.quantidade
    FROM
       estoque

    INNER JOIN #srv2 ON estoque.campoChave= #srv2.campoChave

     

     

    No entanto, como citado acima, caso isso seja um procedimento realizado constantemente, você pode criar uma replicação apenas para esta tabela;

     

    Abraços

     

    Thursday, November 13, 2008 3:21 PM

All replies

  • crie um linked server para os servidores do servir 1

     

    insert into tabela ( campos ) select campos from servidor2.banco_de_dados.dbo.tabela where ....

     

     

    Abs;

     

    Thursday, November 13, 2008 2:58 PM
  • Olá Mecinho,

     

    Seja bem vindo ao fórum de SQL Server do MSDN.

     

    Nós participantes do fórum agradecemos por ter procurado o fórum como fonte de pesquisa. Tentaremos ajudá-lo no esclarescimento de suas dúvidas e resolução dos seus problemas com o SQL Server através de nossa disponibilidade, tempo, experiência e conhecimento a cerca do produto. Se ao final você sentir-se satisfeito com a resposta pedimos que a marque como respondida para que o autor da(s) resposta(s) seja reconhecido e que o sistema de busca a contemple prioritariamente nas buscas futuras.

     

    Você poderá fazer essa cópia de várias formas:

     

    Utilizando o Import / Export Wizard

     

    Abra o Enterprise Manager, vá em Data Transformation Services, clique com o botão direito, All Tasks, Export Wizard. Configure a origem e o destino e escolha "Use a Query To Especify a Data To Transfer" coloque a consulta e execute o Wizard até o final. O SQL Server 2005 tem algo muito semelhante ao DTS. Consulte o link abaixo:

     

    http://www.plugmasters.com.br/sys/materias/568/1/SQL-Server-2005-Wizards%3A-Migra%E7%E3o-de-dados

     

    Olhando e vendo

     

    Considerando que você deseja copiar uma única linha somente eu sinceramente sugeriria que você montasse manualmente o comando de INSERT e o executasse no outro servidor. Acho que é a forma mais rápida e segura de realizar essa cópia.

     

    [ ]s,

     

    Gustavo

    Thursday, November 13, 2008 3:01 PM
  • Mecinho,

     

    Você pode criar um Linked Server no servidor 2 que está conectado ao servidor 1 e então fazer um INSERT com SELECT.

     

    Ex:

     

    Code Snippet

    -- query no servidor 2

    INSERT INTO dbo.Estoque

    SELECT * FROM [NOMELINKEDSERVER].[NOMEBD].[dbo].[Estoque] WHERE RowID = @Id

     

    Acredito que no seu cenário um esquema de replicação cairia como uma luva.

     

    Alguns links:

    http://msdn.microsoft.com/en-us/library/ms188279(SQL.90).aspx (Linked Server)

    http://msdn.microsoft.com/en-us/library/ms151198(SQL.90).aspx (Replicação de Dados)

     

    Att.

     

    Ari C. Raimundo

    Thursday, November 13, 2008 3:02 PM
  • Olá Mecinho,

    Supondo que você ainda não possui um linked server do server 1 para o server 2

     

    Para adicionar o linked server ( permitir você fazer consultas em ambos os servidores ), execute o seguinte comando:

     

    Code Snippet

     

    EXEC sp_addlinkedserver

    @server='srv2', -- Nome do linked Server

    @srvproduct='', -- Pode ser qualquer coisa

    @provider='SQLOLEDB', -- Provider para Accesso

    @datasrc='srv2',--nome do servidor 2

    @catalog = 'nomeDoBancoNoServer2'

     

    Fazendo o select desejado:

     

    --Retorna as linhas da tabelas estoque do server 1

    Code Snippet
    select
    * from srv1.producao.dbo.Estoque

     

     

    --Retorna as linhas da tabelas estoque do server 2

    Code Snippet
    select
    * from srv2.producao.dbo.Estoque

     

     

     

    Para realizar o insert:

     

    Code Snippet

    Insert into srv2.producao.dbo.Estoque(

    id,

    nome

    )

    select

    id,

    nome

    from

    srv1.producao.dbo.Estoque

    where

    id not in (

    select id from srv2.producao.dbo.Estoque

    )

     

     

    Abraços

     

     

    Thursday, November 13, 2008 3:06 PM
  • Marcelo,

    Manjo muito pouco de SQL. Vou tentar te explicar o que estou tentando fazer:

    A tabela que quero modificar é organizada da seguinte maneira:

    SERVIDOR 1
    Produto      Data            Quantidade   Custo
       etc   etc   etc   etc   etc   etc   etc
        1           31/10/2008             2             79.61    79.61        0    2    79.61    0    79.61    0   
        1           09/11/2008             5            
    79.61    79.61        0    2    79.61    0    79.61    0
        1           10/11/2008             0                 0           0             0    0        0         0       0        0   


    SERVIDOR 2
    Produto      Data            Quantidade   Custo
       etc   etc   etc   etc   etc   etc   etc
        1           31/10/2008             2             79.61    79.61        0    2    79.61    0    79.61    0   
        1           09/11/2008             5            
    79.61    79.61        0    2    79.61    0    79.61    0
        1           10/11/2008             3              79.61    79.61        0    2    79.61    0    79.61    0


    Como você pode ver, no SERVIDOR 2 a movimentação do dia 10/11/2008 tem valores, enquanto que no SERVIDOR 1 os saldos estão zerados.
    O que quero é transportar apenas os valores da linha do dia 10/11/2008 do
    SERVIDOR 2 para o SERVIDOR 1.

    Grato pela atenção.
    Thursday, November 13, 2008 3:13 PM
  • Mecinho,

     

    Você pode fazer da forma que mostrei. No entanto, usando update com Join ao invés de insert.

     

    Agora, qual o campo que identifica cada linha de sua tabela? Chave primaria?

     

    Seguido do meu post acima, o Update ficaria +- assim:

     

    Estando no srv1:

     

    Code Snippet

    select * into #srv2 from srv2.nomeBanco.dbo.estoque;

    GO

     

    UPDATE
       estoque
    SET
       estoque.quantidade = #srv2.quantidade
    FROM
       estoque

    INNER JOIN #srv2 ON estoque.campoChave= #srv2.campoChave

     

     

    No entanto, como citado acima, caso isso seja um procedimento realizado constantemente, você pode criar uma replicação apenas para esta tabela;

     

    Abraços

     

    Thursday, November 13, 2008 3:21 PM
  • Olá Mecinho,

     

    Com que freqüência você fará isso ? É só uma única vez ou ficará algo mais constante.

     

    [ ]s,

     

    Gustavo

    Thursday, November 13, 2008 6:47 PM