Vous n'avez pas besoin d'une boucle ou même d'une fonction pour cela.
Ce que vous voulez faire peut être fait dans une seule déclaration de mise à jour, car le nombre total par territoire peut être calculé avec une seule agrégation :
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Cela peut ensuite être utilisé comme source pour mettre à jour la table des territoires :
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;
Une alternative qui pourrait être plus facile à comprendre mais qui sera plus lente pour les grandes tables est une mise à jour avec une sous-requête co-liée
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Il y a une légère différence entre la première et la deuxième mise à jour :la seconde mettra à jour le total_sales_person à 0
(zéro) pour les territoires où il n'y a aucun vendeur. Le premier ne mettra à jour que le décompte des territoires réellement présents dans la table des vendeurs.