none
Copiar Tabelas de Bancos Diferentes RRS feed

  • Pergunta

  • Amigos Boa Noite!

    Estou de volta ao SQL, estava numa empresa que usava outro BD, 

    Amigos estou precisando copiar uma tabela de um banco para outro, tentei exportar porem nao consegui.

    O inicial seria assim.

    Banco 1 

    USE EXEMPLO1212CONVT
    SELECT * FROM PFUNC 

    Queria copiar os Dados dessa tabela para o seguinte banco 

    USE EXEMPLO1212 que tem o mesma tabela, como falei antes nao consegui via Export.

    Obrigado Amigos. 

    sábado, 15 de agosto de 2015 01:41

Respostas

  • Desta forma que lhe passei ele criaria a tabela como vi que já existe a tabela faça da seguinte maneira:

    insert into  adventureWorks.dbo.FuncTeste
    select *  from Funcionarios

    INSERT  INTO EXEMPLO1212.(schema).PFUNCCOPY 

    SELECT * FROM PFUNC


    Caio Amante

    • Marcado como Resposta Ronnie Von quarta-feira, 19 de agosto de 2015 20:16
    sábado, 15 de agosto de 2015 20:17
  • Boa tarde,

    Experimente configurar a propriedade IDENTITY_INSERT e especifique o nome das colunas da tabela no Insert  mais ou menos como no exemplo abaixo:

    SET IDENTITY_INSERT EXEMPLO1212.DBO.PFUNC ON;
    
    INSERT INTO EXEMPLO1212.DBO.PFUNC (IDFUNC, NOMEFUNC)
        SELECT IDFUNC, NOMEFUNC FROM PFUNC;
    
    SET IDENTITY_INSERT EXEMPLO1212.DBO.PFUNC OFF;
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Ronnie Von quarta-feira, 19 de agosto de 2015 20:16
    domingo, 16 de agosto de 2015 15:24
  • Vc quer copiar apenas os dados para a tabela nova ou as definições das colunas ??/

    Por que ao usar o "select into" você copia apenas os dados e perde a estrutura ou seja seu campo que é uma PK e Identity deixa de ser.

    Caso você queira manter a estrutura, você precisa criar a tabela destino com as propriedades que vc quer mantendo a estrutura, e nesse caso é preciso fazer um insert select e caso precise fazer uma rotina vc precisa sempre comparar para verificar se um determinado PK não foi inserido já, o comando para desabilitar a inserção de uma PK é usada nesse momento.

    Segue os dois modelos

    Ex 1.: Criando uma NOVA tabela e perdendo a estrutura

    USE [BANCO_ORIGEM]
    SELECT *
    INTO [BANCO_DESTINO].[SCHEMA].[TABELA_DESTINO]
    FROM [TABELA_ORIGEM]

    Ex 2.: Criando uma NOVA tabela e mantendo a estrutura e verificando se o registro já foi inserido (NESSE CASO, É NECESSÁRIO especificar as colunas).

    USE [BANCO_DESTINO] CREATE TABLE TABELA_DESTINO ( ID INT IDENTITY(1,1) PRIMARY KEY, NOME VARCHAR(50) ); GO SET IDENTITY_INSERT [SCHEMA].TABELA_DESTINO ON; INSERT INTO TABELA_DESTINO (ID,NOME) SELECT TBO.ID,TBO.NOME FROM [BANCO_ORIGEM].[SCHEMA].[TABELA_ORIGEM] AS TBO
    WHERE TBO.ID <> ID

    SET IDENTITY_INSERT [SCHEMA].TABELA_DESTINO OFF; GO



    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Marcado como Resposta Ronnie Von quarta-feira, 19 de agosto de 2015 20:15
    terça-feira, 18 de agosto de 2015 13:34
  • Olá Ronnie Von

    Tente bcp out:

    bcp EXEMPLO1212convt.dbo.PFUNC out PFUNC.bcp -SRONNIE-PMP-PC\RONNIE-PMP-PC -Urm -Pm -c -t [#]
    pause

    E depois bcp in:

    bcp EXEMPLO1212.dbo.PFUNC in PFUNC.bcp -S[SERVIDOR_NOVO] -U[USUARIO] -P[SENHA] -c -t [#]
    pause

    Lembrando que este código deverá ser colocado em um arquivo .bat

    O bcp vai ser criado na pasta que o bat foi criado. Não precisa executar como administrador.

    Qualquer dúvida estou no skype contato.fabiocerqueira


    Atenciosamente, Fábio Cerqueira Analista de Suporte Skype: contato.fabiocerqueira Cel: 71 9986.9295 Site: www.fabiocerqueira.com

    • Marcado como Resposta Ronnie Von quarta-feira, 19 de agosto de 2015 20:12
    quarta-feira, 19 de agosto de 2015 12:24

Todas as Respostas

  • Tente da seguinte forma:

    SELECT * INTO EXEMPLO1212.(schema).PFUNCCOPY  FROM PFUNC 

    Me retorne por favor!

    att.


    Caio Amante

    sábado, 15 de agosto de 2015 20:14
  • Desta forma que lhe passei ele criaria a tabela como vi que já existe a tabela faça da seguinte maneira:

    insert into  adventureWorks.dbo.FuncTeste
    select *  from Funcionarios

    INSERT  INTO EXEMPLO1212.(schema).PFUNCCOPY 

    SELECT * FROM PFUNC


    Caio Amante

    • Marcado como Resposta Ronnie Von quarta-feira, 19 de agosto de 2015 20:16
    sábado, 15 de agosto de 2015 20:17
  • Ola Caio, fiz dessa forma 

    INSERT  INTO EXEMPLO1212.DBO.PFUNC

    SELECT * FROM PFUNC

    porem me retornou erro abaixo 

    Mensagem 8101, Nível 16, Estado 1, Linha 1
    An explicit value for the identity column in table 'EXEMPLO1212.DBO.PFUNC' can only be specified when a column list is used and IDENTITY_INSERT is ON.

    Obrigado

    domingo, 16 de agosto de 2015 02:18
  • Boa tarde,

    Experimente configurar a propriedade IDENTITY_INSERT e especifique o nome das colunas da tabela no Insert  mais ou menos como no exemplo abaixo:

    SET IDENTITY_INSERT EXEMPLO1212.DBO.PFUNC ON;
    
    INSERT INTO EXEMPLO1212.DBO.PFUNC (IDFUNC, NOMEFUNC)
        SELECT IDFUNC, NOMEFUNC FROM PFUNC;
    
    SET IDENTITY_INSERT EXEMPLO1212.DBO.PFUNC OFF;
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Ronnie Von quarta-feira, 19 de agosto de 2015 20:16
    domingo, 16 de agosto de 2015 15:24
  • Boa Noite !

    Veja como eu fiz, porem nao esta copiando o que posso esta errando 

    SQL 

    Eu quero copiar as informações do Banco EXEMPLO1212CONVT

    para o EXEMPLO1212

    Estou indo no banco EXEMPLO1212.

    E fazendo dessa forma

    1 - Rodo somente essa Linha

    SET IDENTITY_INSERT EXEMPLO1212.DBO.PFUNC ON;

    Depois essa parte

    INSERT INTO EXEMPLO1212.DBO.PFUNC 
    (  
    [CODCOLIGADA]
          ,[CHAPA]
          ,[NROFICHAREG]
          ,[CODRECEBIMENTO]
          ,[CODSITUACAO]
          OUTRAS COLUNAS )

        SELECT 
     [CODCOLIGADA]
          ,[CHAPA]
          ,[NROFICHAREG]
          ,[CODRECEBIMENTO]
          ,[CODSITUACAO]

          OUTRAS COLUNAS

         FROM PFUNC;

    Depois Rodo essa Linha

    SET IDENTITY_INSERT EXEMPLO1212.DBO.PFUNC OFF;

    Me retorna esse ESSA Mensagem

    Mensagem 2627, Nível 14, Estado 1, Linha 2
    Violation of PRIMARY KEY constraint 'PKPFUNC'. Cannot insert duplicate key in object 'dbo.PFUNC'.
    The statement has been terminated.

    Estou no BASE EXEMPLO1212, querendo copiar os DADOS da tabela PFUNC do BANCO EXEMPLO1212CONVT

    Obrigado Amigos


    segunda-feira, 17 de agosto de 2015 02:11
  • Bom dia,

    Acho que faltou adicionar o nome do outro banco de dados e do esquema no From. Sem eles será utilizada a tabela do mesmo banco de dados. Ex:

        FROM EXEMPLO1212CONVT.DBO.PFUNC;

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 17 de agosto de 2015 12:07
  • Amigo coloquei no from e pedi para Rodar tudo, me retornou a seguinte mensagem 

    Mensagem 8107, Nível 16, Estado 1, Linha 1
    IDENTITY_INSERT is already ON for table 'EXEMPLO1212CONVT.dbo.PFUNC'. Cannot perform SET operation for table 'EXEMPLO1212.DBO.PFUNC'.

    cada hora um erro. 

    Obrigado

    segunda-feira, 17 de agosto de 2015 18:14
  • Não sei se você prentende executar esse Insert com frequência, mas a mensagem indica que a propriedade IDENTITY_INSERT já está configurada igual a ON, então experimente executar o script que sugeri a partir do Insert.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 17 de agosto de 2015 18:32
  • Vc quer copiar apenas os dados para a tabela nova ou as definições das colunas ??/

    Por que ao usar o "select into" você copia apenas os dados e perde a estrutura ou seja seu campo que é uma PK e Identity deixa de ser.

    Caso você queira manter a estrutura, você precisa criar a tabela destino com as propriedades que vc quer mantendo a estrutura, e nesse caso é preciso fazer um insert select e caso precise fazer uma rotina vc precisa sempre comparar para verificar se um determinado PK não foi inserido já, o comando para desabilitar a inserção de uma PK é usada nesse momento.

    Segue os dois modelos

    Ex 1.: Criando uma NOVA tabela e perdendo a estrutura

    USE [BANCO_ORIGEM]
    SELECT *
    INTO [BANCO_DESTINO].[SCHEMA].[TABELA_DESTINO]
    FROM [TABELA_ORIGEM]

    Ex 2.: Criando uma NOVA tabela e mantendo a estrutura e verificando se o registro já foi inserido (NESSE CASO, É NECESSÁRIO especificar as colunas).

    USE [BANCO_DESTINO] CREATE TABLE TABELA_DESTINO ( ID INT IDENTITY(1,1) PRIMARY KEY, NOME VARCHAR(50) ); GO SET IDENTITY_INSERT [SCHEMA].TABELA_DESTINO ON; INSERT INTO TABELA_DESTINO (ID,NOME) SELECT TBO.ID,TBO.NOME FROM [BANCO_ORIGEM].[SCHEMA].[TABELA_ORIGEM] AS TBO
    WHERE TBO.ID <> ID

    SET IDENTITY_INSERT [SCHEMA].TABELA_DESTINO OFF; GO



    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Marcado como Resposta Ronnie Von quarta-feira, 19 de agosto de 2015 20:15
    terça-feira, 18 de agosto de 2015 13:34
  • Olá Ronnie Von

    Tente bcp out:

    bcp EXEMPLO1212convt.dbo.PFUNC out PFUNC.bcp -SRONNIE-PMP-PC\RONNIE-PMP-PC -Urm -Pm -c -t [#]
    pause

    E depois bcp in:

    bcp EXEMPLO1212.dbo.PFUNC in PFUNC.bcp -S[SERVIDOR_NOVO] -U[USUARIO] -P[SENHA] -c -t [#]
    pause

    Lembrando que este código deverá ser colocado em um arquivo .bat

    O bcp vai ser criado na pasta que o bat foi criado. Não precisa executar como administrador.

    Qualquer dúvida estou no skype contato.fabiocerqueira


    Atenciosamente, Fábio Cerqueira Analista de Suporte Skype: contato.fabiocerqueira Cel: 71 9986.9295 Site: www.fabiocerqueira.com

    • Marcado como Resposta Ronnie Von quarta-feira, 19 de agosto de 2015 20:12
    quarta-feira, 19 de agosto de 2015 12:24
  • Obrigado Amigos pela Ajuda. a minha tabela tem um tanto de FK. 

    Obrigado a todos

    quarta-feira, 19 de agosto de 2015 20:15