Вычисленный столбец SQL Server выбирается из другой таблицы
Я не уверен, что лучший способ сделать это, поэтому я опишу, какова конечная цель, и если вычисленный столбец является ответом, тогда, пожалуйста, помогите мне пройти этот маршрут или, возможно, лучше маршрут.
У меня есть две таблицы:
Заказы
OrderId
PackageId
MediaSpend
TotalAdViews (Computed column)
Пакеты
PackageId
BaseAdViews
Каждому заказу присваивается пакет, включающий 1000 просмотров, тогда вы можете купить больше средств для получения большего количества просмотров. Я хотел создать столбец с именем TotalAdViews, который добавит BaseAdViews + MediaSpend. Исходя из моего понимания, если стойкость разрешена, столбцу не нужно пересчитывать каждый раз, когда он запрашивается, что может помочь в производительности.
Как мне получить значение из другой таблицы в моем вычисляемом столбце? Или попросите альтернативный способ выполнить мою цель.
Ответы
Ответ 1
Вы не сможете использовать столбцы из другой таблицы в выражении вычисленного столбца. Это выдержка из документации MSDN.
Вычисленный столбец вычисляется из выражения, которое может использовать другие столбцы в одной таблице.
Вы упомянули, что ваша мотивация использования вычисленного столбца заключалась в увеличении производительности. Существует много ограничений но индексированное представление может добавить значение здесь.
Ответ 2
Я знаю, что этот ответ приходит на два года позже, но только для того, чтобы помочь любому, кто отправляется в Google и находит этот пост:
Совершенно законно определять определяемую пользователем функцию и использовать ее в качестве вычисленного значения. Эта функция может содержать команды выбора из других таблиц.
CREATE FUNCTION dbo.getSumAdViews(@packageId int)
RETURNS int
AS
BEGIN
DECLARE @r int
select @r = SUM(BaseAdViews) from Packages where PackageId = @packageId
RETURN @r
END
Затем в вычисленном столбце просто используйте выражение dbo.getSumAdViews(PackageId)
Ответ 3
если он предназначен только для показа, почему бы не создать представление.
select <<add other columns you need>> mediaspend+basicadviews as totaladviews
from
orders o
join
packages p
on p.packageid=o.orderid