当前位置:Gxlcms > 数据库问题 > 批量导出存储在msdb库的SSIS包

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

时间:2021-07-01 10:21:17 帮助过:16人阅读

msdb.dbo.usp_ExportSSISPkgs) IS NOT NULL DROP PROCEDURE dbo.usp_ExportSSISPkgs; go EXEC dbo.usp_ExportSSISPkgs E:\temp\‘ 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= NEXEC xp_cmdshell N‘‘mkdir " + @exportPath +@pkgFolder+ \"‘‘‘; EXEC(@cmd); SET @cmd=Nbcp "SELECT PkgData FROM tempdb.dbo.tbl_SSISPkgXML + WHERE PkgName= ‘‘‘‘‘+@pkgName+‘‘‘‘‘ AND PkgFolder= ‘‘‘‘‘+@pkgFolder+‘‘‘‘‘" queryout " + @exportPath+ @pkgFolder+ \‘+@pkgName+.dtsx" -T -w -S"‘+@@SERVERNAME+‘"‘ ; SET @cmd = NEXEC 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

 

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

标签:proc   figure   ssis   cte   arch   close   from   isp   exist   

人气教程排行