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'