Вычисляем столбец через скалярную функцию ошибки - PullRequest
0 голосов
/ 17 февраля 2020

Этот вопрос относится к пользовательской скалярной функции для генерации вычисляемого столбца

ALTER TABLE dbo.Installment  
ADD SurchargeCalculated AS 
   (select Amount * Days * InstSurchargePercentage / 365 / 100
    from InstallMentPlan 
    where InstallMentPlan.PlanKey = Installment.PlanKey
   )
GO

Ошибка:

Msg 1046, уровень 15 Состояние 1, строка 3
Подзапросы не допускаются в этом контексте. Допускаются только скалярные выражения.

1 Ответ

2 голосов
/ 17 февраля 2020

Вы не можете сделать это с вычисляемым столбцом: он может ссылаться только на столбцы из той же таблицы и той же строки.

В качестве обходного пути вы можете определить представление:

create view dbo.InstallmentView as
select 
    i.*,
    (
        select p.Amount * p.Days * p.InstSurchargePercentage / 365 / 100
        from dbo.InstallMentPlan p
        where p.PlanKey = i.PlanKey
    ) SurchargeCalculated 
from  dbo.Installment i

Это также можно выразить с помощью join:

create view dbo.InstallmentView as
select 
    i.*,
    p.Amount * p.Days * p.InstSurchargePercentage / 365 / 100 SurchargeCalculated 
from  dbo.Installment i
left join dbo.InstallMentPlan p on p.PlanKey = i.PlanKey

Обратите внимание, что вы должны перечислять столбцы, которые вы хотите выбрать, в форме dbo.Installment вместо использования * (я сделал это только потому, что Я не знаю вашей структуры базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...