Bạn không cần một vòng lặp hoặc thậm chí một hàm cho việc này.
Những gì bạn muốn làm có thể được thực hiện trong một câu lệnh cập nhật vì tổng số trên mỗi lãnh thổ có thể được tính bằng một tổng hợp duy nhất:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Sau đó, đây có thể được sử dụng làm nguồn để cập nhật bảng lãnh thổ:
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;
Một giải pháp thay thế có thể dễ hiểu hơn nhưng sẽ chậm hơn đối với các bảng lớn hơn là cập nhật với truy vấn phụ cùng liên quan
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Có một chút khác biệt giữa bản cập nhật đầu tiên và thứ hai:bản thứ hai sẽ cập nhật total_sales_woman thành 0
(không) đối với những lãnh thổ không có nhân viên bán hàng nào cả. Cái đầu tiên sẽ chỉ cập nhật số lượng cho các lãnh thổ thực sự có trong bảng nhân viên bán hàng.