---------------------
-- Begin Section A --
---------------------
set nocount on
--Declaring variable
DECLARE @object int
DECLARE @pkgname nvarchar(255)
declare @rc int
DECLARE @src varchar(255)
Declare @desc varchar(255)
Declare @Numof int
Declare @NumofItems int
declare @i int
declare @j int
Declare @property varchar(8000)
Declare @property_value varchar(8000)
Declare @property_name varchar(8000)
-- Get list of Packages from KB article 241249
if exists(select * from tempdb.dbo.sysobjects where name like '#dts_package____%')
drop table #dts_packages
create table #dts_packages
(name varchar(1000),
id uniqueidentifier,
versionid uniqueidentifier,
description varchar(1000),
createdate datetime,
owner varchar(100),
size int,
packagedata image,
isowner varchar(100),
packagetype int
)
insert into #dts_packages exec msdb..sp_enum_dtspackages
-------------------
-- End Section A --
-------------------
---------------------
-- Begin Section B --
---------------------
while (select count(*) from #dts_packages) > 0
begin
select top 1 @pkgname=name from #dts_packages order by name
delete from #dts_packages where name = @pkgname
Print 'Starting the migration of package ' + rtrim(@pkgname)
--Creating object
EXEC @rc = sp_OACreate 'DTS.Package', @object OUTPUT
IF @rc <> 0 goto PrintError
-- Load Package from Source Server
EXEC @rc = sp_OAMethod @object, 'LoadFromSQLServer',
-- SQL Server Authentication
-- NULL,'SERVER1','login','password','0','','','',@pkgname
-- Windows Authentication
NULL,'SERVER1','','','256','','','',@pkgname
IF @rc <> 0 goto PrintError
print 'Package loaded successfully'
-------------------
-- End Section B --
-------------------
---------------------
-- Begin Section C --
---------------------
-- Get Number of Connections
EXEC @rc = sp_OAGetProperty @object, 'Connections.Count', @Numof OUT
IF @rc <> 0 goto PrintError
set @i = 0
-- Process Through each Connection
While @i < @Numof
begin
set @i = @i + 1
-- Get Name of Connections
set @property = 'Connections(' + rtrim(cast(@i as char)) + ').Name'
EXEC @rc = sp_OAGetProperty @object, @property, @property_value OUT
IF @rc <> 0 goto PrintError
-- Change SERVER1 to SERVER2 in Connection Name
if charindex('SERVER1',@property_value) > 0
begin
Print 'Change Connection.Name for ' + @property
set @property_value = replace(@property_value,'SERVER1','SERVER2')
EXEC @rc = sp_OASetProperty @object, @property, @property_value
IF @rc <> 0 goto PrintError
end
-- Get DataSource of Connections
set @property = 'Connections(' + rtrim(cast(@i as char)) +
').DataSource'
EXEC @rc = sp_OAGetProperty @object, @property, @property_value OUT
IF @rc <> 0 goto PrintError
-- Change SERVER1 to SERVER2 in Connection Value
if charindex('SERVER1',@property_value) > 0
begin
Print 'Changed Connection.DataSource for ' + @property
set @property_value =
replace(@property_value,'SERVER1','SERVER2')
EXEC @rc = sp_OASetProperty @object, @property, @property_value
IF @rc <> 0 goto PrintError
end
end
-------------------
-- End Section C --
-------------------
---------------------
-- Begin Section D --
---------------------
-- Get Number of Task
EXEC @rc = sp_OAGetProperty @object, 'Tasks.Count', @Numof OUT
IF @rc <> 0 goto PrintError
set @i = 0
-- Process Through each Task
While @i < @Numof
begin
set @i = @i + 1
-- Get Number of Properties
set @property = 'Tasks(' + rtrim(cast(@i as char)) +
').Properties.Count'
EXEC @rc = sp_OAGetProperty @object, @property, @NumofItems OUT
IF @rc <> 0 goto PrintError
-- Process through all properties
set @j = 0
while @j < @NumofItems
begin
set @j = @j + 1
-- Get Name of Property
set @property = 'Tasks(' + rtrim(cast(@i as char)) +
').Properties(' +
rtrim(cast(@j as char)) + ').Name'
EXEC @rc = sp_OAGetProperty @object, @property, @Property_name OUT
IF @rc <> 0 goto PrintError
-- Get Value of Property
set @property = 'Tasks(' + rtrim(cast(@i as char)) +
').Properties(' +
rtrim(cast(@j as char)) + ').Value'
EXEC @rc = sp_OAGetProperty @object, @property, @Property_value OUT
IF @rc <> 0 goto PrintError
-- Change SERVER1 to SERVER2 in Value of Each Property
if charindex('SERVER1',@property_value) > 0
begin
Print 'Changed Task.Properties for ' + replace(@property,'Value',@property_name)
set @property_value =
replace(@property_value,'SERVER1','SERVER2')
EXEC @rc = sp_OASetProperty @object, @property, @property_value
IF @rc <> 0 goto PrintError
end
end
end
-------------------
-- End Section D --
-------------------
---------------------
-- Begin Section E --
---------------------
-- Get Number of Steps
EXEC @rc = sp_OAGetProperty @object, 'Steps.Count', @Numof OUT
IF @rc <> 0 goto PrintError
set @i = 0
-- Process Through each Step
While @i < @Numof
begin
set @i = @i + 1
-- Get Number of Properties
set @property = 'Steps(' + rtrim(cast(@i as char)) +
').Properties.Count'
EXEC @rc = sp_OAGetProperty @object, @property, @NumofItems OUT
IF @rc <> 0 goto PrintError
-- Process through all properties
set @j = 0
while @j < @NumofItems
begin
set @j = @j + 1
-- Get Value of Each Property
set @property = 'Steps(' + rtrim(cast(@i as char)) +
').Properties(' +
rtrim(cast(@j as char)) + ').Value'
EXEC @rc = sp_OAGetProperty @object, @property, @Property_value OUT
IF @rc <> 0 goto PrintError
-- Change SQLPROD1 to DOHDBOLYPR01 in Value of Each Property
if charindex('SERVER1',@property_value) > 0
begin
Print 'Changed Steps.Properties for ' + replace(@property,'Value',@property_name)
set @property_value =
replace(@property_value,'SERVER1','SERVER2')
EXEC @rc = sp_OASetProperty @object, @property, @property_value
IF @rc <> 0 goto PrintError
end
end
end
-------------------
-- End Section E --
-------------------
---------------------
-- Begin Section F --
---------------------
-- Remove package from Server2
EXEC @rc = sp_OAMethod @object, 'RemoveFromSQLServer',
NULL,SERVER2,'','','256','','',@pkgname
IF @rc <> 0 and @rc <> -2147217900 -- the -2147217900 is the return code if package does not exist
goto PrintError
-- Save DTS package to Server2
EXEC @rc = sp_OAMethod @object, 'SaveToSQLServer',
NULL,'SERVER2', '','','256'
IF @rc <> 0 goto PrintError
Print 'Package Saved Successfully'
end
return
-- Process Errors
PrintError:
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT rc=convert(varbinary(4),@rc), Source = @src, Description = @desc
-------------------
-- End Section F --
-------------------