I am trying to split the msdb.dbo.sysjobsteps.command
column into separate columns to show the following information:
- folder
- project
- dtx package
A small sample of my data is below:
x
/ISSERVER ""SSISDBVWGroup_PackagesAudiME SSIS Continuous LoadDealerLoad_GX_FM_WW.dtsx""
/ISSERVER ""SSISDBVWGroup_PackagesVWG IN SSIS Continuous LoadABC to DW - Unapproved.dtsx""
/ISSERVER ""SSISDBMercedes_PackagesMercedes Cars SSIS Continuous LoadSubmissions Load.dtsx""
/ISSERVER ""SSISDBMercedes_PackagesMercedes Cars SSIS Continuous LoadValidations Load.dtsx""
/ISSERVER ""SSISDBAGCO_Packagesagco SSIS Continuous LoadMetis to ABC - agco UK.dtsx""
/ISSERVER ""SSISDBAGCO_Packagesagco SSIS Continuous LoadMetis to ABC - agco ie.dtsx""
/ISSERVER ""SSISDBVWGroup_PackagesVWG PL SSIS Continuous LoadABC to DW - Approved.dtsx""
/ISSERVER ""SSISDBYamaha PackagesYamaha SSIS Packages and WareHouse_LoadsABCtoDWLoadModifiedCnt.dtsx""
/ISSERVER ""SSISDBJLRJLR SSIS Continuous LoadSubmissions Load.dtsx""
I have tried to use the substring
method, however I cannot seem to get the starting and ending number of the substring.
My aim is for the following in a ssms table:
Advertisement
Answer
You can use transform your data to xml to perform a “split” on backslashes and then you can extract only the data you need with an XQuery using the value()
xml method (more info here on MS Docs).
In the following code I created a mock table called @tmp
with your data:
declare @tmp table (package_path nvarchar(max))
insert into @tmp values
('/ISSERVER ""SSISDBVWGroup_PackagesAudiME SSIS Continuous LoadDealerLoad_GX_FM_WW.dtsx""')
,('/ISSERVER ""SSISDBVWGroup_PackagesVWG IN SSIS Continuous LoadABC to DW - Unapproved.dtsx""')
,('/ISSERVER ""SSISDBMercedes_PackagesMercedes Cars SSIS Continuous LoadSubmissions Load.dtsx""')
,('/ISSERVER ""SSISDBMercedes_PackagesMercedes Cars SSIS Continuous LoadValidations Load.dtsx""')
,('/ISSERVER ""SSISDBAGCO_Packagesagco SSIS Continuous LoadMetis to ABC - agco UK.dtsx""')
,('/ISSERVER ""SSISDBAGCO_Packagesagco SSIS Continuous LoadMetis to ABC - agco ie.dtsx""')
,('/ISSERVER ""SSISDBVWGroup_PackagesVWG PL SSIS Continuous LoadABC to DW - Approved.dtsx""')
,('/ISSERVER ""SSISDBYamaha PackagesYamaha SSIS Packages and WareHouse_LoadsABCtoDWLoadModifiedCnt.dtsx""')
,('/ISSERVER ""SSISDBJLRJLR SSIS Continuous LoadSubmissions Load.dtsx""')
;with splitted_packages
as (
select
cast('<x>' + REPLACE(package_path, '', '</x><x>') + '</x>' as xml) as package_frament
from @tmp
)
select
package_frament.value(N'/x[4]', 'nvarchar(max)') as Folder
,package_frament.value(N'/x[5]', 'nvarchar(max)') as Projects
,package_frament.value(N'/x[6]', 'nvarchar(max)') as Package
from splitted_packages
This is the final result of the previous command: