批量导出存储在msdb库的SSIS包

简介:

use msdb   
go


IF OBJECT_ID('msdb.dbo.usp_ExportSSISPkgs') IS NOT NULL   
  DROP PROCEDURE dbo.usp_ExportSSISPkgs;    
go


CREATE PROCEDURE dbo.usp_ExportSSISPkgs   
@exportPath NVARCHAR(2000)='D:\temp\'    
AS    
BEGIN

  DECLARE @pkgData XML, @pkgName NVARCHAR(1000),@pkgFolder NVARCHAR(4000), @cmd NVARCHAR(MAX) ;   
  PRINT '--Info: Create temp tables.';    
  IF (OBJECT_ID('tempdb.dbo.tbl_SSISPkgXML') IS NOT NULL)    
  BEGIN    
    PRINT '--Info: Drop existing temp table tempdb.dbo.tbl_SSISPkgXML.';    
    DROP TABLE tempdb.dbo.tbl_SSISPkgXML;    
  END    
  CREATE TABLE tempdb.dbo.tbl_SSISPkgXML(ID INT IDENTITY(1,1), PkgName NVARCHAR(1000) NULL, PkgFolder NVARCHAR(MAX) NULL,    
           PkgID VARCHAR(40) NULL,PkgData XML NULL);    
 

  PRINT '--Info: Insert Package data into tempdb.dbo.tbl_SSISPkgXML.';   
  IF (SELECT CHARINDEX('SQL Server 2005', @@VERSION))>0    
  --2005 version    
  BEGIN    
    --Use recursive CTE to get FULL path for SSIS packages on msdb    
    SET @cmd='WITH tbl_ssispkgfolder (FullPath, folderid)    
AS    
(SELECT CONVERT(NVARCHAR(MAX),''\root''),folderid FROM msdb.dbo.sysdtspackagefolders90    
  WHERE parentfolderid IS NULL    
  UNION ALL    
  SELECT CONVERT(NVARCHAR(MAX),t.FullPath+''\''+s.foldername),s.folderid    
  FROM msdb.dbo.sysdtspackagefolders90 s    
  JOIN tbl_ssispkgfolder t ON s.parentfolderid=t.folderid)    
    INSERT INTO tempdb.dbo.tbl_SSISPkgXML (PkgName,PkgID,PkgFolder,PkgData)    
      SELECT p.name, p.id, f.FullPath, CAST(CAST(packagedata AS varbinary(MAX)) AS XML)    
   FROM msdb.dbo.sysdtspackages90 p JOIN tbl_ssispkgfolder f ON p.folderid=f.folderid;';    
      EXEC(@cmd);    
  END    
  ELSE    
  --2008 or later version    
  BEGIN    
     SET @cmd='WITH tbl_ssispkgfolder (FullPath, folderid)    
AS    
(SELECT CONVERT(NVARCHAR(MAX),''\root''),folderid FROM msdb.dbo.sysssispackagefolders    
  WHERE parentfolderid IS NULL    
  UNION ALL    
  SELECT CONVERT(NVARCHAR(MAX),t.FullPath+''\''+s.foldername),s.folderid    
  FROM msdb.dbo.sysssispackagefolders s    
  JOIN tbl_ssispkgfolder t ON s.parentfolderid=t.folderid)    
    INSERT INTO tempdb.dbo.tbl_SSISPkgXML (PkgName,PkgID,PkgFolder,PkgData)    
      SELECT p.name, p.id, f.FullPath, CAST(CAST(packagedata AS varbinary(MAX)) AS XML)    
   FROM msdb.dbo.sysssispackages p JOIN tbl_ssispkgfolder f ON p.folderid=f.folderid    
      WHERE ISNULL(p.description,'''''''') NOT LIKE ''System Data Collector Package''    
      ;';    
      EXEC(@cmd);    
  END

  PRINT '--Info: Enable xp_cmdshell to allow access File System from SQL Engine';   
  EXEC sp_configure 'show advanced options',1;    
  RECONFIGURE WITH OVERRIDE;    
  EXEC sp_configure 'xp_cmdshell',1;    
  RECONFIGURE WITH OVERRIDE;

  PRINT '--Info: Start exporting...'   
  DECLARE cur_DtsxFile CURSOR FOR SELECT PkgName,PkgData, PkgFolder FROM tempdb.dbo.tbl_SSISPkgXML;    
  OPEN cur_DtsxFile;    
  FETCH NEXT FROM cur_DtsxFile INTO @pkgName, @pkgData, @pkgFolder;    
  WHILE (@@FETCH_STATUS=0)    
  BEGIN    
    PRINT '--Info: Create Package folder under '+@exportPath+ '';    
    SET @cmd= N'EXEC xp_cmdshell N''mkdir "' + @exportPath +@pkgFolder+ '\"''';    
    EXEC(@cmd);    
    SET @cmd=N'bcp "SELECT PkgData FROM tempdb.dbo.tbl_SSISPkgXML '    
   + 'WHERE PkgName=  '''''+@pkgName+''''' AND PkgFolder= '''''+@pkgFolder+'''''" queryout "'    
   + @exportPath+ @pkgFolder+ '\'+@pkgName+'.dtsx" -T -w -S"'+@@SERVERNAME+'"' ;    
    SET @cmd = N'EXEC xp_cmdshell N'''+@cmd +'''' ;    
    PRINT '--Info: Export package '+QUOTENAME(@pkgName)+' to ' + @exportPath +@pkgFolder+'';    
    EXEC(@cmd);    
    FETCH NEXT FROM cur_DtsxFile INTO @pkgName,@pkgData,@pkgFolder;    
  END    
  CLOSE cur_DtsxFile;    
  DEALLOCATE cur_DtsxFile;    

END












本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1924464 ,如需转载请自行联系原作者


相关文章
|
SQL 数据可视化 数据库
怎么使用可视化数据库工具 DBeaver 在账单类型 type 表里添加数据?
怎么使用可视化数据库工具 DBeaver 在账单类型 type 表里添加数据?
506 0
怎么使用可视化数据库工具 DBeaver 在账单类型 type 表里添加数据?
|
canal 关系型数据库 MySQL
【笔记】用户指南—数据导入和导出—使用DTS导入和导出数据
PolarDB-X提供丰富的数据导入和导出方式,以保持与其他数据系统的互通。本文主要介绍通过DTS导入导出数据的方式。
195 0
|
SQL 关系型数据库 MySQL
【笔记】用户指南—数据导入和导出—使用程序进行数据导入
本文将介绍如何通过编写代码的方式,将导入数据到PolarDB-X中。
154 0
|
关系型数据库 MySQL Java
用户指南—数据导入和导出—使用程序进行数据导入
本文将介绍如何通过编写代码的方式,将导入数据到PolarDB-X中。
138 0
|
数据库
作业与SSIS包结合
SQL SERVER 数据库的一些自动化管理操作不得不提作业,它非常方便;你也可以通过编写程序现实。这篇主要讲SSIS包配置、部署、与作业结合自动执行。不涉及到SSIS包开发。 准备一个收缩数据库的SSIS包如图   包配置,点击菜单栏中的SSIS弹出如图       1)点击添加选择配置类型和路径如图 3)我们这里选择是XML配置文件一直点击下一步直到完成。
1310 0