Я настоятельно рекомендую вам не использовать скалярные UDF для какой-либо значительной обработки. Для отдельных вызовов это не плохо, но вызов его для любого значительного числа строк, как правило, работает очень плохо.
Если вы вызываете это для нескольких продуктов в каком-либо другом наборе строк, UDF не будет хорошо масштабироваться.
Представление или встроенная табличная функция будут работать намного лучше:
т.е.
CREATE VIEW vQuantity AS
SELECT
sum(qty) as qty,
product_id
FROM vProductQuantity
GROUP BY product_id
и
SELECT *
FROM t
LEFT JOIN vQuantity ON vQuantity.product_id = t.product_id
или
CREATE FUNCTION udfQuantity(any params) RETURNS TABLE AS
RETURN (
SELECT
sum(qty) as qty,
product_id
FROM vProductQuantity
GROUP BY product_id
)
и
SELECT *
FROM t
LEFT JOIN udfQuantity(any params) AS Quantity ON Quantity.product_id = t.product_id
Я настоятельно рекомендую вам пересмотреть план выполнения любого процесса, в котором вы используете скалярный UDF.