/***********************************************************************************************************************************/
----									COMENTARIOS									   ----

-- PONER EL SCRIPT EN LA BASE DE DATOS DESTINO.

-- PONER EL NOMBRE DE LA BASE DE DATOS ORIGEN EN LA VARIABLE *****@BDOrigen**** POS 47 
-- PONER EL NOMBRE DE LA BASE DE DATOS DESTINO EN LA VARIABLE ****@BDDestino**** POS 48

-- PONER EL NOMBRE DE LA BASE DE DATOS ORIGEN EN EL *****USE**** POS 81
-- PONER EL NOMBRE DE LA BASE DE DATOS DESTINO EN LA VARIABLE ****USE**** POS 87 - 93
/***********************************************************************************************************************************/

-- BEGIN TRAN DBI

------------- CREACION TABLAS Y CAMPOS DE DB -------------------------------------------------------------------------------------
create table #NombreTablaS (Nom_Table nvarchar(MAX),
							Nom_Column nvarchar(MAX),
							NumIdentity int,
						    Pos_Table int)

create table #NombreCampoS (Nom_Table nvarchar(MAX),
						    Nom_Column nvarchar(MAX),
						    Pos_Column int)


------------- CREACION TABLA Identity ORIGEN ----------------------------------------------------------------------------------
create table #Tabla_Identity (Nom_table nvarchar(MAX),
							  NumIdentity int,)						 

					 
--------------- VARIABLES -------------------------------------------------------------------------------------------
DECLARE @Noms_Columns nvarchar(MAX),
		@NumMaxTable int,
		@NumMaxColumns int,
		@Nom_Table nvarchar(MAX),
		@Nom_TB_Origen nvarchar(MAX),
		@Nom_DB_Origen nvarchar(MAX),
		@Nom_DB_Destino nvarchar(MAX),
		@Nom_TB_NO nvarchar(MAX),
		@Nom_Ide nvarchar(MAX),
		@Num_Ide int,
		@ITable nvarchar(MAX)


------------- CONTADORES --------------------------------------------------------------------------------------------
set @NumMaxTable=1 
set @Nom_DB_Origen ='InnFront' 
set @Nom_DB_Destino='InnFront_New'
set @Nom_TB_NO=null

------------- INSERT TABLAS Y CAMPOS DE DB EN #NombreTablaS y #NombreCampoS ---------------------------------------------------------
insert into #NombreTablaS
select TABLE_NAME, TABLE_NAME,null, ROW_NUMBER() OVER(ORDER BY table_name) AS Pos_Table  
from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'

insert into #NombreCampoS
select isc.TABLE_NAME,isc.COLUMN_NAME,isc.ORDINAL_POSITION from INFORMATION_SCHEMA.COLUMNS isc
			  inner join INFORMATION_SCHEMA.TABLES ist on isc.TABLE_NAME = ist.TABLE_NAME
			  where TABLE_TYPE='BASE TABLE'

-------------- CARGA LOS CAMPOS A COPIAR * TABLA EN #NombreTablaS -------------------------------------------------------------------------

While @Nummaxtable <= (select MAX(Pos_Table) from #NombreTablaS)
  BEGIN
	  select @Noms_Columns= coalesce (@Noms_Columns +',','') + LEFT(Nom_Column,LEN(Nom_Column)) from #NombreCampoS 
									where Nom_Table=(select Nom_Table from #NombreTablaS where Pos_Table=@NumMaxTable)
      update #NombreTablaS set Nom_Column= @Noms_Columns where Nom_Table = (select Nom_Table from #NombreTablaS where Pos_Table=@NumMaxTable)   
      
	  set @NumMaxTable = @NumMaxTable + 1	
	  set @Noms_Columns =NULL

  END
set @NumMaxTable=1

-------------- Busca el numero de identity y Traspasa los identity  -------------------------------------------------------------------------
/********      HAY QUE PONER EL NOMBRE DE LA DB ORIGEN Y DESTINO                *************/

While @Nummaxtable <= (select MAX(Pos_Table) from #NombreTablaS)
  BEGIN
      select @Nom_Ide= Nom_table from #NombreTablaS where Pos_Table=@NumMaxTable
      use InnFront  ---------------------------------------------------------------- ORIGEN
	  select @Num_Ide= ident_current(@Nom_Ide)
      update #NombreTablaS set NumIdentity= @Num_Ide where Nom_Table = @Nom_Ide  
      insert into #Tabla_Identity (Nom_table,NumIdentity) values (@Nom_Ide,@Num_Ide)
      if @Num_Ide is not null
      BEGIN
      use InnFront_New    ------------------------------------------------------------- DESTINO      
       execute('dbcc checkident('+@Nom_Ide+', reseed,'+@Num_Ide+')')
      END
      
      set @NumMaxTable = @NumMaxTable + 1
  END
      use InnFront_New    ------------------------------------------------------------- DESTINO      
  
set @NumMaxTable=1

-------------- INTRODUCION DE DATOS A LA TABLA DESTINO -------------------------------------------------------------------------

Exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'
Exec sp_MSforeachtable 'ALTER TABLE ? nocheck Constraint ALL'

while @Nummaxtable <= (select MAX(Pos_Table) from #NombreTablaS)
  BEGIN
    
    select @Nom_TB_Origen=Nom_Table, @ITable=Nom_Column from #NombreTablaS where Pos_Table = @Nummaxtable
    print @Nom_TB_Origen
    If (select NumIdentity from #NombreTablaS where Pos_Table=@Nummaxtable) is NULL
    BEGIN
		execute ('delete '+@Nom_TB_Origen+'
	          insert '+@Nom_TB_Origen+' ('+@ITable+') select '+@ITable+' from '+@Nom_DB_Origen+'..'+@Nom_TB_Origen+'')
    END
    ELSE
    BEGIN
		execute ('delete '+@Nom_TB_Origen+'
			  set identity_insert '+@Nom_TB_Origen+' on
			  insert '+@Nom_TB_Origen+' ('+@ITable+') select '+@ITable+' from '+@Nom_DB_Origen+'..'+@Nom_TB_Origen+'	
				set identity_insert '+@Nom_TB_Origen+' off' )
    END 
    
   set @NumMaxTable = @NumMaxTable + 1
    
  END

Exec sp_MSforeachtable 'ALTER TABLE ? enable TRIGGER ALL'
Exec sp_MSforeachtable 'ALTER TABLE ? check Constraint ALL'



drop table #NombreTablaS
drop table #NombreCampoS
drop table #Tabla_Identity



--ROLLBACK








