Utilidades para SQL Server

A veces hay que traspasar datos de una tabla a otra tabla con exactamente los mismos campos, y si las tablas no se encuentran en el mismo server, o no disponemos de un linked server para copiar los datos con una consulta directa, hay que hacer una exportación de los datos, y después una importación en el nuevo entorno.

Para ello SQL Server Management Studio dispone de asistentes que te permiten exportar los datos, o generar las sentencias de insert, o también se puede utilizar Integration Services para hacer la operación con una tabla como origen y la otra como destino en un simple dataflow.

Pero una manera aún más rápida es utilizar un script SQL que, si tienes acceso al catálogo del sistema, consulte los campos de una tabla determinada para generar con esta información una sentencia insert para cada registro de la misma, con los valores que se han de insertar en el otro entorno.

Después sólo hay que copiar los inserts y ejecutarlos en el entorno de destino.

Este es el script de generación dinámica de inserts para migrar todos los datos de una tabla, con el nombre de la tabla como único parámetro:

-- Dynamic insert generation -----------------------------------------------------------
DECLARE @Table as varchar(100)='[dbo].[MySourceTable]'
DECLARE @ColumnsList varchar(max)=''
DECLARE @ColumnsList4Values varchar(max)=''
DECLARE @SQL as varchar(max)=''
SELECT @ColumnsList= STUFF ((
SELECT ', [' + name + ']'
FROM syscolumns
WHERE id = OBJECT_ID(''+@Table+'') AND name <> 'me'
FOR XML PATH('')), 1, 1, '')
--print @ColumnsList
SELECT @ColumnsList4Values= STUFF ((
SELECT ','''''' + CAST([' + name + '] AS varchar) + '''''' '
FROM syscolumns
WHERE id = OBJECT_ID(''+@Table+'') AND name <> 'me'
FOR XML PATH('')), 1, 1, '')
print @ColumnsList4Values
-- Create query -----------------------------------------------------------------------
-- If exists field identity -
--SELECT @SQL= 'SET IDENTITY_INSERT '+ @Table + ' ON;'
--select @SQL -- Query1 SET Identity ON
SELECT @SQL=
        'SELECT ''INSERT INTO ' + @table + ' ('+
@ColumnsList +
') ' +
'VALUES (' +
@ColumnsList4Values+
')'' FROM ' + @table
-- @SQL
select @SQL -- Query2 Insert values
-- If exists field identity
--SELECT @SQL= 'SET IDENTITY_INSERT '+ @Table + ' OFF;'
--select @SQL -- Query3 SET Identity off
-- END ----------------------------------------------------------------------------------