Exportar los datos de una tabla en Inserts en SQL Server

Para exportar datos de una tabla en Inserts en SQL Server, se puede hacer de manera más o menos intuitiva dependiendo del cliente que se utilice. En SQL Server Management Studio por ejemplo, se puede hacer desde el menú contextual, creando una tarea y seleccionando que sólo se desea exportar los datos y no la estructura de la tabla.

Una manera más sencilla y aplicable a todos los clientes de SQL Server, es mediante la siguiente función. Esta función, obtiene directamente las columnas de la tabla que le pasemos a través de las tablas diccionario, por lo que simplemente indicándole el nombre de la tabla a exportar, ya se obtiene los inserts que deberíamos ejecutar para importar los datos.

if exists (select * from sysobjects where id = object_id(N'[dbo].[sp_CreateDataLoadScript]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_CreateDataLoadScript]
GO

CREATE PROCEDURE sp_CreateDataLoadScript
@TblName varchar(128)
as

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

insert #a (ColType, ColName)
select case when DATA_TYPE like '%char%' then 1 else 0 end ,
COLUMN_NAME
from information_schema.columns
where TABLE_NAME = @TblName
order by ORDINAL_POSITION

if not exists (select * from #a)
begin
raiserror('No columns found for table %s', 16,-1, @TblName)
return
end

declare @id int ,
@maxid int ,
@cmd1 varchar(7000) ,
@cmd2 varchar(7000)

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

select @cmd1 = 'select '' insert ' + @TblName + ' ( '
select @cmd2 = ' + '' select '' + '
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 ColType = 1 then ''''''''' + ' + ColName + ' + ''''''''' 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 ' + @tblName

select '/*' + @cmd1 + @cmd2 + '*/'

exec (@cmd1 + @cmd2)
drop table #a

go

El script de creación está blidado, es decir, si ya existía esta función no dará error, ya que comprueba antes si ya existía.

Para ejecutarlo bastaría con lanzar lo siguiente:

exec sp_CreateDataLoadScript 'nombre_tabla'

Al ejecutarlo devuelve 2 cosas:

  • La select que ha utilizado para generar los inserts, la cual si la ejecutamos nos devolverá las sentencias insert listas para ser ejecutadas.
  • Las sentencias inserts en sí, con todos los datos. Es lo que devuelve al ejecutar la sentencia Select que también devuelve la función.

Deja un comentario

Pin It on Pinterest

Logo Trellat
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.