Du behøver ikke en loop eller endda en funktion til dette.
Det, du vil gøre, kan gøres i en enkelt opdateringserklæring, fordi det samlede antal pr. område kan beregnes med en enkelt aggregering:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Denne kan derefter bruges som kilde til at opdatere territorietabellen:
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;
Et alternativ, der måske er lettere at forstå, men som vil være langsommere for større tabeller, er en opdatering med en co-relateret underforespørgsel
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Der er en lille forskel mellem den første og anden opdatering:den anden opdaterer total_sales_person til 0
(nul) for de områder, hvor der slet ikke er nogen sælger. Den første opdaterer kun antallet af områder, der faktisk er til stede i sælgertabellen.