@ gbn ударил его из парка своим ответом, но позвольте мне добавить свои 0,02 доллара.Поскольку ваш скалярный UDF обращается к таблицам, я уверен, что вы не сможете сохранить этот столбец.Тем не менее, давайте проясним все на 100%:
Нет абсолютно никакой выгоды, если добавить вычисляемый столбец описанным вами способом и много потерять.
Во-первых, даже если вы можете сохранить этот столбец, любые запросы, которые обращаются к этой таблице, будут выполняться медленнее, а иногда даже медленнее.Скалярные пользовательские функции T-SQL для вычисляемых столбцов, в качестве ограничений или для значений по умолчанию делают запросы, ссылающиеся на эту таблицу, непараллелизуемыми;только серийное исполнение!Кроме того, доступные оптимизации становятся существенно ограниченными после введения скалярного UDF T-SQL.Опять же - плохая, плохая плохая идея.
Как сказал gbn - индексированное представление - это путь (если вы можете потерять это левое соединение).Другой вариант - использовать функцию Inline Table Valued, когда вам нужно это значение;он будет работать лучше, чем вычисляемый столбец (при условии, что вы добавите соответствующие индексы. Функция будет выглядеть следующим образом:
CREATE FUNCTION dbo.fnCalcOutstandingBalance(@ItemReferance int)
RETURNS TABLE WITH SCHEMABINDING AS RETURN
SELECT Result = ISNULL(sum(Quantity),0) -
(
SELECT ISNULL([Accepted Quantity],0)
FROM dbo.[Order Transactions Table]
WHERE @ItemReferance = [Item Referance]
)
FROM dbo.[Delivery Table]
GROUP BY [Item Referance]
HAVING @ItemReferance = [Item Referance];
Чтобы использовать эту функцию, вы должны понимать APPLY . Вотхорошее прочтение о том, почему скалярные пользовательские функции T-SQL ужасны для вычисляемых столбцов и ограничений.
Вычисляемый столбец с [scalar udf] может повлиять на производительность запроса - Кун Ченг (SQLCAT)
Еще один скрытый убийца параллелизма: скалярные UDF в проверочных ограничениях - Эрик Дарлинг
Другая причина, по которой скалярные функции в вычисляемых столбцах - плохая идея - ЭрикДорогая
Осторожно-ряд-ряд-операции-udf-clothing - Брайан Моран
Будьте осторожны с ограничениями, вызывающими UDFs - Тибор Караси
Почему в План выполнения включен скалярный вызов udf для сохраняемого вычисляемого столбца? - Переполнение стека