I have Table1 with columns like this:
+--+------+
|ID|Name |
+--+------+
|1 |MSSQL |
+--+------+
|2 |MySQl |
+--+------+
|3 |Oracle|
+--+------
No splitting, also no XML Path, but achieves the right result.
;with cte as (
select *, cast(null as varchar(1024)) as str, cast(0 as int) as ID
from Table2
union all
select DatabaseName, (case when DatabaseName like cast(t.ID as varchar(32)) + ',%'
or DatabaseName like '%,' + cast(t.ID as varchar(32)) + ',%'
or DatabaseName like '%,' + cast(t.ID as varchar(32))
or DatabaseName = cast(t.ID as varchar(32)) then cast(isnull(str, '') + ',' + t.Name as varchar(1024)) else str end), cte.ID + 1 as ID
from cte
inner join Table1 t on cte.ID + 1 = t.ID
)
select DatabaseName, (case when str like ',%' then substring(str, 2, len(str)) else null end) as str
from cte c
where ID = (select max(ID) from cte where DatabaseName = c.DatabaseName)