Este script gera umn código para realização de um INSERT através de um SELECT
Alem do conceito do comando INSERT/SELECT, temos os conceitos :
BANCO.SCHEMA.TABELA;
SET IDENTITY_INSERT nome_da_tabela ON
SET IDENTITY_INSERT nome_da_tabela OFF;
Link com otima explicação :
http://www.devmedia.com.br/definindo-valores-para-uma-coluna-identity/1548
Espero poder ajudar aos que precisam qualquer duvida é só entra em contato
/****** Script Para gerar rotina INSERT com SELECT******/
PRINT 'use <<< SEU BANCO >>>'
DECLARE @TABELA_ORIGEM varchar(50)
DECLARE @TABELA_DESTINO varchar(50)
DECLARE @countador int;
DECLARE @chave_primaria varchar(50)
DECLARE @campo varchar(50)
-- MUDA AS VARIAVEIS AQUI AQUI AQUI AQUI AQUI AQUI
-- dbo = Schema padrão
SET @TABELA_ORIGEM='<< BANCO.dbo.TABELA >>'
SET @TABELA_DESTINO='<< TABELA DESTINO >>'
-- ----------------------------------------- PRIMEIRA PARTE
PRINT '
-- Incluindo dados na tabela destino '+@TABELA_DESTINO+' da Origem '+ @TABELA_ORIGEM
PRINT 'SET IDENTITY_INSERT '+@TABELA_DESTINO+' ON'
PRINT 'INSERT INTO
'+@TABELA_DESTINO+'('
SET @countador=0
DECLARE lista_01 CURSOR SCROLL FOR SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS where table_name=@TABELA_DESTINO
OPEN lista_01
-- deleção de todos os bancos
FETCH FIRST FROM lista_01 INTO @campo
WHILE @@FETCH_STATUS = 0
BEGIN
-- controle se estamos no ultimo registro do laco SE for o ultimo nao imprimo o and
SET @countador=@countador+1
IF @countador < @@CURSOR_ROWS PRINT ' '+@campo+','
ELSE PRINT ' '+@campo+')'
FETCH NEXT FROM lista_01 INTO @campo
END
CLOSE lista_01
DEALLOCATE lista_01
-- ----------------------------------------- TERCEIRA PARTE
PRINT ' SELECT '
SET @countador=0
DECLARE lista_03 CURSOR SCROLL FOR SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS where table_name=@TABELA_DESTINO
OPEN lista_03
-- deleção de todos os bancos
FETCH FIRST FROM lista_03 INTO @campo
WHILE @@FETCH_STATUS = 0
BEGIN
-- controle se estamos no ultimo registro do laco SE for o ultimo nao imprimo o and
SET @countador=@countador+1
IF @countador < @@CURSOR_ROWS PRINT ' '+@campo+','
ELSE PRINT ' '+@campo+'
FROM '+@TABELA_ORIGEM
FETCH NEXT FROM lista_03 INTO @campo
END
CLOSE lista_03
DEALLOCATE lista_03
PRINT 'SET IDENTITY_INSERT '+@TABELA_DESTINO+' OFF'