Eu tenho um banco de dados chamado foo e um banco de dados chamado bar. Eu tenho uma tabela no foo chamada tblFoobar que eu quero mover (dados e tudo) para a barra de banco de dados do banco de dados foo. Qual é a instrução SQL para fazer isso?
Eu tenho um banco de dados chamado foo e um banco de dados chamado bar. Eu tenho uma tabela no foo chamada tblFoobar que eu quero mover (dados e tudo) para a barra de banco de dados do banco de dados foo. Qual é a instrução SQL para fazer isso?
Respostas:
No SQL Server? e no mesmo servidor de banco de dados? Use nomes de três partes.
INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
Isso apenas move os dados. Se você deseja mover a definição da tabela (e outros atributos, como permissões e índices), precisará fazer outra coisa.
A tarefa "Importar dados" do SQL Server Management Studio (clique com o botão direito do mouse no nome do banco de dados e depois em tarefas) fará a maior parte disso. Execute-o no banco de dados para o qual você deseja copiar os dados.
Se as tabelas não existirem, elas serão criadas para você, mas você provavelmente precisará recriar quaisquer índices e outros. Se as tabelas existirem, ele anexará os novos dados por padrão, mas você poderá ajustá-los (editar mapeamentos) para excluir todos os dados existentes.
Eu uso isso o tempo todo e funciona bastante bem.
WHERE
condição usando a tarefa Importar Dados? Não consegui encontrar uma maneira de fazê-lo.
identity
e as foreign key
referências são removidas no banco de dados de destino, alguma solução?
Isso deve funcionar:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
Ele vai não copiar constrangimentos, padrões ou índices. A tabela criada não terá um índice em cluster.
Como alternativa, você pode:
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
Se sua tabela de destino existir e estiver vazia.
INSERT INTO...
) funcionou para mim no Oracle.
Se for apenas uma tabela, tudo o que você precisa fazer é
Uma coisa que você deve considerar são outras atualizações, como migrar outros objetos no futuro. Observe que suas tabelas de origem e destino não têm o mesmo nome. Isso significa que você também precisará fazer alterações se depender de objetos como visualizações, procedimentos armazenados e outros.
Com um ou vários objetos, você pode ir manualmente sem problemas. No entanto, quando existem mais do que apenas algumas atualizações, as ferramentas de comparação de terceiros são muito úteis. No momento, estou usando o ApexSQL Diff para migrações de esquema, mas você não pode dar errado com nenhuma outra ferramenta disponível.
Script do create table
no estúdio de gerenciamento, execute esse script na barra para criar a tabela. (Clique com o botão direito do mouse na tabela no explorador de objetos, na tabela de scripts como, crie para ...)
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
SET IDENTITY_INSERT TblName ON
nesse caso.
Você também pode usar o Assistente para Gerar Scripts do SQL Server para ajudar a orientar a criação de scripts SQL que podem fazer o seguinte:
Bom exemplo de fluxo de trabalho para o SQL Server 2008 com capturas de tela mostradas aqui .
Você pode seguir este caminho: (um exemplo geral)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
Além disso, se você precisar gerar os nomes das colunas e inserir a cláusula de inserção, use:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')
Copie o resultado e cole na janela de consulta para representar os nomes das colunas da tabela e mesmo isso excluirá a coluna de identidade:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0
Lembre-se de que o script para copiar linhas funcionará se os bancos de dados pertencerem ao mesmo local.
Você pode tentar isso.
select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>
O nome do servidor é opcional se os dois bancos de dados estiverem no mesmo servidor.
Copiar dados
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details