Posteado por: edeortuzar | 09/12/2010

Generar insert de toda una instancia SQL Server


Les dejo el código para que puedan generar los insert de toda una instancia o una sola tabla, algo necesario que no se porque no lo trae SQL Server, o yo no sé donde tiene la opción en tal caso.

Saludos.

DECLARE @NombreTabla VARCHAR(128)

create table #resultado (dato varchar(2500))

SELECT TABLE_NAME
INTO #TEMP_TABLE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_CATALOG='prot_15823_SCLP_NUEVA'
and TABLE_NAME <> 'sysdiagrams'

WHILE (SELECT Count(*) FROM #TEMP_TABLE) > 0
BEGIN
SELECT TOP 1 @NombreTabla = TABLE_NAME FROM #TEMP_TABLE

	create table #a (id int identity (1,1), ColType int, ColName varchar(128), DataType varchar(100))

	insert 	#a (ColType, ColName, DataType)
	select case when DATA_TYPE like '%char%' then 1 else 0 end ,
		COLUMN_NAME, DATA_TYPE
	from 	information_schema.columns
	where 	TABLE_NAME = @NombreTabla
	order by ORDINAL_POSITION
	
	if not exists (select * from #a)
	begin
		raiserror('No columns found for table %s', 16,-1, @NombreTabla)
		return
	end

	declare	@id int ,
		@maxid int ,
		@cmd1 varchar(7000) ,
		@cmd2 varchar(7000),
		@cmd3 varchar(50) = 'insert into #resultado '

	select 	@id = 0 ,
		@maxid = max(id)
	from 	#a

	select	@cmd1 = 'select '' insert ' + @NombreTabla + ' ( '
	select	@cmd2 = ' + '' values ( '' + '
	while @id < @maxid
	begin
		select @id = min(id) from #a where id > @id

		select 	@cmd1 = @cmd1 + ColName + ','
		from	#a
		where	id = @id

		select @cmd2 = 	@cmd2
				+ ' case when ' + ColName + ' is null '
				+	' then ''null'' '
				+	' else '
				+	case when DataType like '%char%' then  ''''''''' + ' + ColName + ' + ''''''''' 
					when DataType like '%datetime%' then  '''''''''+ SUBSTRING(CONVERT(nvarchar(20), ' + ColName + ', 20),1,10) + '''''''''
					else 'convert(varchar(20),' + ColName + ')' end
				+ ' end + '','' + '
		from	#a
		where	id = @id
	end


	select @cmd1 = left(@cmd1,len(@cmd1)-1) + ' ) '' '
	select @cmd2 = left(@cmd2,len(@cmd2)-8) + ' + '');'' from ' + @NombreTabla

	/* COMENTAR ESTO */
	/*
	select '/*' + @cmd3 + @cmd1 + @cmd2 + '*/'
	*/
	
	exec (@cmd3 + @cmd1 + @cmd2)
	
	drop table #a
	
	DELETE #TEMP_TABLE WHERE TABLE_NAME = @NombreTabla

END

select * from #resultado

PRINT 'Proceso de borrado completado…';
DROP TABLE #TEMP_TABLE
DROP TABLE #resultado

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: