Это должно работать:
With cte as
(Select *, ROW_NUMBER() over (order by (Select null)) as ranking from #tbl1)
,cte2 as
(Select cte.Alert_Id, #tbl3.PROGRAM_WORKFLOW_ID from cte
join #tbl2 on cte.ranking = #tbl2.ID
left join #tbl3 on #tbl3.ID = #tbl2.ALERT_ID)
Update #tbl1
Set WORK_FLOW_ID = cte2.PROGRAM_WORKFLOW_ID
from #tbl1 join cte2
on #tbl1.ALERT_ID = cte2.Alert_Id
Схема:
Create table #tbl1 (ALERT_ID int, WORK_FLOW_ID int )
Insert into #tbl1 values (21, NULL),(22, NULL),(23 , NULL),(24 ,NULL),(25 , NULL),(26 , NULL)
Create table #tbl2 (ID int, ALERT_ID int)
Insert into #tbl2 values (1 , 0),(2, 1),(3 , 1),(4 , 2),(5 , 2),(6 , 3)
Create table #tbl3 (ID int, PROGRAM_WORKFLOW_ID int)
Insert into #tbl3 values (1 , 21),(2 , 22),(3 , 23),(4 , 24),(5, 25),(6 , 26)