Du behöver inte en slinga eller ens en funktion för detta.
Det du vill göra kan göras i en enda uppdateringssats eftersom det totala antalet per territorium kan beräknas med en enda aggregering:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Detta kan sedan användas som källa för att uppdatera territoriumtabellen:
UPDATE territory2_t
SET total_sales_person = t.total_count
FROM (
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
) t
WHERE territoryid = t.salesterritoryid;
Ett alternativ som kan vara lättare att förstå men som är långsammare för större tabeller är en uppdatering med en samrelaterad underfråga
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Det finns en liten skillnad mellan den första och andra uppdateringen:den andra kommer att uppdatera total_sales_person till 0
(noll) för de områden där det inte finns någon säljare alls. Den första uppdaterar bara antalet för territorier som faktiskt finns i säljartabellen.