I need to get list of objects depends in each SSIS package using SQL script, or any other approach autoprocess.
Example ssis solution have 2 packages.
package1.dtsx
package2.dtsx
Package1.dtsx
has 5 tasks, and 2 are "Execute SQL" tasks and 3 are data flow tasks. Here 1 executesql
is used usp_emp procedured
And the 2nd ExecuteSql task uses usp_dept
procedure and others 3 dataflow tasks source: is emp and destination tables also emp.
Now I want get output like
package name |packagefoldepath | connectionstring | sqlobjects |variables |tasknames
packag1.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;"| usp_emp | |executesqltask1
packag1.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;" |usp_dept | |executesqltask2
packag1.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;" |emp | |dft1_oledsoure
packag1.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;" |emp | |dft1_oleeddestinaton
packag1.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;" |emp | |dft2_oledsoure
packag1.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;" |emp | |dft2_oleeddestinaton
packag1.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;" |emp | |dft3_oledsoure
packag1.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;" |emp | |dft3_oleeddestinaton
packag2.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=False;"| | usp_var and sp |executesqltask2
packag2.dtsx |FolderName/ProjectName/Package1.dtsx |"Data Source=.;Initial Catalog=test;Provider=SQLNLocalHost.test;Auto Translate=Fal|se | |loca_var and prcodurename|executesql |df|_oleeddestinaton
I have tried with the SQL code:
WITH PackageXML AS
(
SELECT
f.folder_name + '/' + p.project_name + '/' + pk.package_name AS package_folder_path,
CAST(pk.package_data AS XML) AS package_xml
FROM
SSISDB.catalog.folders f
JOIN
SSISDB.catalog.projects p ON f.folder_id = p.folder_id
JOIN
SSISDB.catalog.packages pk ON p.project_id = pk.project_id
)
SELECT
px.package_folder_path AS package_name,
c.value('(DTS:ObjectData/DTS:ConnectionManager/DTS:Property[@DTS:Name="ConnectionString"])[1]', 'NVARCHAR(MAX)') AS connection_string,
e.value('(DTS:Property[@DTS:Name="SqlStatementSource"])[1]', 'NVARCHAR(MAX)') AS sql_objects,
v.value('(DTS:Variable/DTS:Property[@DTS:Name="Value"])[1]', 'NVARCHAR(MAX)') AS variables,
t.value('@DTS:Name', 'NVARCHAR(255)') AS task_name
FROM
PackageXML px
CROSS APPLY package_xml.nodes('//DTS:Executable') AS Tasks(t)
OUTER APPLY package_xml.nodes('//DTS:ConnectionManagers/DTS:ConnectionManager') AS Connections(c)
OUTER APPLY package_xml.nodes('//DTS:Executable/DTS:ObjectData/DTS:ExecuteSQLTask') AS SQLTasks(e)
OUTER APPLY package_xml.nodes('//DTS:Variables/DTS:Variable') AS Vars(v)
WHERE
t.value('@DTS:ExecutableType', 'NVARCHAR(255)') IN ('SSIS.ExecuteSQLTask', 'SSIS.DataFlow');
but this query not given expect result and package_data always getting null values. Could someone please tell me how to write query to achieve this task in SQL Server.