批量导出存储在msdb库的SSIS包
admin
2023-05-24 20:44:35
0

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



相关内容

热门资讯

AI营销进入深水区 不同路径殊... 中新网上海新闻5月18日电(李佳佳)人工智能从能力验证走向行业落地的2026年,营销领域正成为这场变...
全民皆兵!伊朗民众学习如何使用... 据凤凰卫视报道,在伊朗首都德黑兰的市中心,民众聚集在一名伊朗伊斯兰革命卫队士兵周围,学习使用突击步枪...
万斯:美伊谈判取得“很大进展” △5月19日,美国副总统万斯在白宫新闻简报会上当地时间5月19日,美国副总统万斯在白宫新闻简报会上表...
全环境立德树人|广饶县:“科普... 近日,一场别开生面的 “科普漂流”活动在东营市科技馆火热启程。来自广饶县的40余名青少年走出课堂,在...
西安AI数字人选择指南 在西安,AI数字人已经从概念走向了实实在在的应用。无论是企业宣传、短视频制作,还是直播带货,数字人正...
10分钟飞越深山!无人机送出“... 在四川省雅安市汉源县唐家镇尚礼村,一架满载新鲜甜樱桃的无人机从海拔1500米的起飞点缓缓升空,平稳驶...
能源金融双线突破,西方制裁反证... 01五月北京:全球外交焦点汇聚,中俄高层会晤启新程今年5月,全球外交的钟摆,正以前所未有的高频在北京...
不仅要把人工智能送上天,长三角... 能够在3分钟内完成未来60天天气预测的“伏羲”气象模型,如今正实时加工着来自太空的“一手”气象数据。...
追觅创始人俞浩称无比感谢雷军:... 【CNMO科技消息】据CNMO科技了解,追觅科技创始人兼CEO俞浩近日在访谈中回顾了公司早期获得小米...
跑遍多家官方旗舰店!2026手... 大家好,我是小杨。说实话,写这篇文章之前,我花了整整一个周末,把各大手机官方旗舰店挨个逛了一遍。不是...