有点难看,但使用了一点 JSON(对序列进行 GTD)和窗口函数lead() over()
示例
Declare @YourTable table (ID int,SomeCol varchar(max))
Insert Into @YourTable values
(1,'host-001.servers.company.com desc=''Production Web Cache'' env=''Prod'' patch_round=''Beta'' dc=''Main'' rhel_v=''7.6'' primary=''admin@company.com'' secondary=''manager@company.com''')
Select A.ID
,Host = left(SomeCol,charindex(' ',SomeCol+' '))
,B.*
From @YourTable A
Cross Apply (
Select Item = ltrim(rtrim(right(Value,charindex(' ',reverse(Value)+' '))))
,Value = ltrim(rtrim(replace(
IsNull(lead( left(Value,nullif(len(Value)+1-charindex(' ',reverse(Value)+' '),0)),1) over (order by [Key])
,lead(right(Value,charindex(' ',reverse(Value)+' ')),1) over (order by [key])
),'''','')))
From OpenJSON( '["'+replace(string_escape(SomeCol,'json'),'=','","')+'"]' )
) B
Where B.Value is not null
结果
ID Host Item Value
1 host-001.servers.company.com desc Production Web Cache
1 host-001.servers.company.com env Prod
1 host-001.servers.company.com patch_round Beta
1 host-001.servers.company.com dc Main
1 host-001.servers.company.com rhel_v 7.6
1 host-001.servers.company.com primary admin@company.com
1 host-001.servers.company.com secondary manager@company.com
编辑 - 注入“HOST="
Declare @YourTable table (ID int,SomeCol varchar(max))
Insert Into @YourTable values
(1,'host-001.servers.company.com desc=''Production Web Cache'' env=''Prod'' patch_round=''Beta'' dc=''Main'' rhel_v=''7.6'' primary=''admin@company.com'' secondary=''manager@company.com''')
Select A.ID
,B.*
From @YourTable A
Cross Apply (
Select Item = ltrim(rtrim(right(Value,charindex(' ',reverse(Value)+' '))))
,Value = ltrim(rtrim(replace(
IsNull(lead(left(Value,nullif(len(Value)+1-charindex(' ',reverse(Value)+' '),0)),1) over (order by [Key])
,lead(right(Value,charindex(' ',reverse(Value)+' ')),1) over (order by [key])
),'''','')))
From OpenJSON( '["'+replace(string_escape('host='+SomeCol,'json'),'=','","')+'"]' )
) B
Where B.Value is not null
结果
ID Item Value
1 host host-001.servers.company.com
1 desc Production Web Cache
1 env Prod
1 patch_round Beta
1 dc Main
1 rhel_v 7.6
1 primary admin@company.com
1 secondary manager@company.com