Anda tidak perlu loop atau bahkan fungsi untuk ini.
Apa yang ingin Anda lakukan dapat dilakukan dalam satu pernyataan pembaruan karena jumlah total per wilayah dapat dihitung dengan satu agregasi:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Ini kemudian dapat digunakan sebagai sumber untuk memperbarui tabel wilayah:
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;
Alternatif yang mungkin lebih mudah dipahami tetapi akan lebih lambat untuk tabel yang lebih besar adalah pembaruan dengan sub-kueri terkait
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Ada sedikit perbedaan antara update pertama dan kedua:update kedua akan mengupdate total_sales_person menjadi 0
(nol) untuk wilayah di mana tidak ada tenaga penjual sama sekali. Yang pertama hanya akan memperbarui jumlah wilayah yang benar-benar ada di tabel staf penjualan.