No necesita un bucle o incluso una función para esto.
Lo que desea hacer se puede hacer en una sola declaración de actualización porque el recuento total por territorio se puede calcular con una sola agregación:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Esto se puede usar como fuente para actualizar la tabla de territorios:
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;
Una alternativa que podría ser más fácil de entender pero que será más lenta para tablas más grandes es una actualización con una subconsulta relacionada
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Hay una ligera diferencia entre la primera y la segunda actualización:la segunda actualizará total_sales_person a 0
(cero) para aquellos territorios donde no hay ningún vendedor. El primero solo actualizará el recuento de los territorios que realmente están presentes en la tabla de vendedores.