Tenho duas tabelas idênticas e preciso copiar linhas de uma tabela para outra. Qual o melhor jeito pra fazer isso? (Preciso copiar programaticamente apenas algumas linhas, não preciso usar o utilitário de cópia em massa).
Respostas:
Enquanto não houver colunas de identidade, você pode apenas
INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]
SET IDENTITY_INSERT < table > ON(e SET IDENTITY_INSERT < table > OFF) para desabilitar temporariamente a coluna de identidade na tabela que está tentando inserir. Trabalhou para mim tentando restaurar alguns registros ausentes no meio do conjunto de dados.
Sintaxe alternativa:
INSERT tbl (Col1, Col2, ..., ColN)
SELECT Col1, Col2, ..., ColN
FROM Tbl2
WHERE ...
A consulta selecionada pode (é claro) incluir expressões, declarações case, constantes / literais, etc.
A resposta de Jarrett cria uma nova mesa.
A resposta de Scott é inserida em uma tabela existente com a mesma estrutura.
Você também pode inserir em uma tabela com estrutura diferente:
INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ...
funciona em SQL Server
SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >
SELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]