微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[SQLServer][DTS][存储过程]保存所有的DTS包到指定的路径

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

Create procedure s_SavePackages
@Path varchar(128)
as
/*

*/

 set nocount on

declare @objPackage int
declare @PackageName varchar(128)
declare @rc int
declare @ServerName varchar(128)
declare @FileName varchar(128)
declare @FilePath varchar(128)
declare @cmd varchar(2000)
 
 select  @ServerName = @@ServerName,
  @FilePath = @Path
 
 if right(@Path,1) <> '/'
 begin
  select @Path = @Path + '/'
 end
 
 -- create output directory - will fail if already exists but ...
 select @cmd = 'mkdir ' + @FilePath
 exec master..xp_cmdshell @cmd
 
 
create table #packages (PackageName varchar(128))
 insert  #packages
  (PackageName)
 select  distinct name
 from msdb..sysdtspackages
 
 select @PackageName = ''
 while @PackageName < (select max(PackageName) from #packages)
 begin
  select @PackageName = min(PackageName) from #packages where PackageName > @PackageName

  select @FileName = @FilePath + @PackageName + '.dts'

  exec @rc = sp_OACreate 'DTS.Package',@objPackage output
  if @rc <> 0
  begin
   raiserror('Failed to create package rc = %d',16,-1,@rc)
   return
  end

  exec @rc = sp_OAMethod @objPackage,'LoadFromsqlServer',null,   @ServerName = @ServerName,@Flags = 256,@PackageName = @PackageName  if @rc <> 0  begin   raiserror('Failed to load package rc = %d,package = %s',@rc,@PackageName)   return  end    -- delete old file  select @cmd = 'del ' + @FileName  exec master..xp_cmdshell @cmd,no_output    exec @rc = sp_OAMethod @objPackage,'SavetoStorageFile',@FileName  if @rc <> 0  begin   raiserror('Failed to save package rc = %d,@PackageName)   return  end    exec @rc = sp_OADestroy @objPackage endgoexec s_SavePackages 'c:/'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐