Sie brauchen dafür keine Schleife oder gar eine Funktion.
Was Sie tun möchten, kann in einer einzigen Aktualisierungsanweisung durchgeführt werden, da die Gesamtzahl pro Gebiet mit einer einzigen Aggregation berechnet werden kann:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Dies kann dann als Quelle zum Aktualisieren der Gebietstabelle verwendet werden:
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;
Eine Alternative, die möglicherweise einfacher zu verstehen ist, aber für größere Tabellen langsamer ist, ist ein Update mit einer zugehörigen Unterabfrage
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Es gibt einen kleinen Unterschied zwischen dem ersten und dem zweiten Update:Das zweite aktualisiert die total_sales_person auf 0
(Null) für die Gebiete, in denen es überhaupt keinen Verkäufer gibt. Die erste aktualisiert nur die Anzahl der Gebiete, die tatsächlich in der Verkäufertabelle vorhanden sind.