Nossos usuários desejam atualizar um banco de dados de controle de qualidade da produção, mas desejam duas tabelas (vamos chamá-las de T1 e T2) para manter os dados originais do controle de qualidade. Então, copiei duas tabelas do controle de qualidade (DB1) para um banco de dados temporário de controle de qualidade (DB2). DB1 atualizado da produção. Após a atualização, desejo sobrescrever os dados T1 e T2 do DB2 para o DB1 para que eles possam conter valores de QA de pré-atualização.
Eu fiz o seguinte:
Usar
select * INTO D1.dbo.T1 FROM D2.dbo.T1
Então D1 atualizado a partir de prod
Em seguida, trunque T1 com a seguinte etapa:
SELECT COUNT(*) AS BeforeTruncateCount FROM T1; GO TRUNCATE TABLE T1; GO SELECT COUNT(*) AS AfterTruncateCount FROM T1; GO
Agora, quando volto a copiar dados de D2.T1 para D1.T1, recebo o erro de que já existe um objeto chamado T1 no banco de dados.
Devo largar a mesa e copiar?
Ou existe algum método melhor para todo o procedimento?
fonte
*
) se houver um campo de indentação na tabela - esses valores não podem ser apenas "copiados".O IIRC com a
SELECT <stuff> INTO <target> FROM ...
sintaxe do SQL Server sempre pressupõe que você deseja criar a tabela de destino do zero. Quando a tabela já existir, tenteINSERT <target> SELECT <stuff> FROM ...
.fonte
db_datareader
), se você soltar a tabela, perderá essas permissões.O melhor é usar o SSIS (importação / exportação de dados) para fazer isso. Ele tem a funcionalidade de transferir apenas as tabelas selecionadas da origem para o destino. Opcionalmente, você pode até salvar o pacote para que possa ser reutilizado para transferências futuras / repetidas.
EDIT: Adicionando mais capturas de tela para maior clareza.
fonte