Nepotřebujete k tomu smyčku nebo dokonce funkci.
To, co chcete udělat, lze provést v jediném příkazu aktualizace, protože celkový počet na území lze vypočítat pomocí jediné agregace:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
To pak lze použít jako zdroj pro aktualizaci tabulky území:
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;
Alternativou, která může být srozumitelnější, ale u větších tabulek bude pomalejší, je aktualizace se souvisejícím dílčím dotazem
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Mezi první a druhou aktualizací je malý rozdíl:druhá aktualizuje total_sales_person na 0
(nula) pro ta území, kde není žádný prodejce. První z nich aktualizuje počet pouze pro území, která jsou skutečně přítomna v tabulce prodejců.