Você não precisa de um loop ou mesmo de uma função para isso.
O que você deseja fazer pode ser feito em uma única instrução de atualização porque a contagem total por território pode ser calculada com uma única agregação:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Isso pode ser usado como fonte para atualizar a tabela de territórios:
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;
Uma alternativa que pode ser mais fácil de entender, mas será mais lenta para tabelas maiores é uma atualização com uma subconsulta co-relacionada
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Há uma pequena diferença entre a primeira e a segunda atualização:a segunda atualizará o total_sales_person para
0
(zero) para os territórios onde não há nenhum vendedor. O primeiro só atualizará a contagem dos territórios que estão realmente presentes na tabela do vendedor.