Como transferir paquetes DTSX desde un Server a Otro en forma transparente.


En los casos que necesitemos realizar una tranferencia de Paquetes de Integration Services de un equipo a otro, el siguiente Script muestra como hacerlo.
Hay que tener en cuenta, de que este script, se debe ejecutar desde el servidor de Origen de los paquetes, caso contrario, no funiona.

Esto solo funciona con SQL Server 2005, no con versiones superiores.
Para SQL Server 2008, revisar el siguiente post: http://wp.me/p10Ka6-3b


DECLARE @srcServer as VARCHAR(24) -- Source server name
DECLARE @destServer VARCHAR(24) -- Destination server name
DECLARE @srcUser VARCHAR(24) -- SQL Server login used to connect to the source server
DECLARE @srcPassword VARCHAR(24) -- Password of the SQL Server login on the source server
DECLARE @destUser VARCHAR(24) -- SQL Server login used to connect to the destination server
DECLARE @destPassword VARCHAR(24) -- Password of the SQL Server login on the destination server
DECLARE @SQL VARCHAR(4096)

SET @destServer = 'SERVER2'
SET @srcServer = 'SERVER1'
SET @srcUser = ''
SET @srcPassword = ''
SET @destUser = ''
SET @destPassword = ''

DECLARE curExecSQL Cursor

FOR
-- Copy SSIS packages
select 'EXEC [master].[sys].[xp_cmdshell] ''dtutil /Quiet /COPY SQL;'
+
case foldername when '' then '"' + [name] + '"' else '"' + foldername
+ '\' + [name] + '"' end
+ ' /SQL ' + case foldername when '' then '"' + [name] + '"' else '"'
+ foldername + '\' + [name] + '"' end
+ ' /SOURCESERVER ' + @srcServer
+ case @srcUser when '' then '' else ' /SourceUser ' + @srcUser + ' /SourcePassword ' + @srcPassword end
+ ' /DESTSERVER ' + @destServer
+ case @destUser when '' then '' else ' /DestUser ' + @destUser + ' /DestPassword ' + @destPassword end + ''''
from
msdb.dbo.sysdtspackages90 pkg join msdb.dbo.sysdtspackagefolders90
fld
on pkg.folderid = fld.folderid

OPEN curExecSQL

Fetch NEXT FROM curExecSQL INTO @SQL
WHILE @@FETCH_STATUS = 0

BEGIN
PRINT 'Executing' + CHAR(10) + @SQL + CHAR(10) + '---------------'
EXEC(@SQL)

FETCH NEXT FROM curExecSQL INTO @SQL

END
CLOSE curExecSQL
DEALLOCATE curExecSQL
GO

Otra forma de probar esta ejecución, es tomar un paquete como ejemplo y transferirlo desde el Qwery Analizer.

EXEC [master].[sys].[xp_cmdshell] 'dtutil /Quiet /COPY SQL;"ADS_Dynamic_Site_Creative" /SQL "ADS_Dynamic_Site_Creative" /SOURCESERVER LEGOLAS\DBSAFA3001 /SourceUser sa /SourcePassword PassStrong /DESTSERVER 192.168.1.101 /DestUser sa /DestPassword PassStrong'