Я хотел бы эффективно добавить вычисляемый столбец, который суммирует столбец из выбранных строк в другой таблице. Мне нужно быстро получить и найти значения в вычисляемом столбце без повторного вычисления суммы.
Вычисляемый столбец, который я хотел бы добавить, будет выглядеть в Dream-SQL следующим образом:
ALTER TABLE Invoices ADD Balance
AS SUM(Transactions.Amount) WHERE Transactions.InvoiceId = Invoices.Id
Конечно, это не работает. Насколько я понимаю, вы не можете добавить вычисляемый столбец, который ссылается на другую таблицу. Однако оказывается, что индексированное представление может содержать такой столбец.
Проект основан на Entity Framework Code First. Приложение должно быстро находить ненулевые остатки.
Предполагая, что индексированное представление — это правильный путь, каков наилучший подход к его интеграции с таблицами «Счета-фактуры» и «Транзакции», чтобы упростить его использование с LINQ to Entities? Должно ли индексированное представление содержать все столбцы таблицы «Счета» или только «Баланс» (то, что сохраняется)? Фрагмент кода SQL для создания рекомендуемого представления и индекса был бы полезен.
CREATE FUNCTION SumInvoiceTransactions(@InvoiceId int) RETURNS decimal AS BEGIN RETURN (SELECT sum(Amount) FROM Transactions WHERE InvoiceId=@InvoiceId) END
, за которой следуетALTER TABLE Invoices ADD Balance as dbo.SumInvoiceTransactions(Id)
. Проблема заключается в том, что при добавлении индекса происходит сбой: столбец «Баланс» в таблице «Счета-фактуры» нельзя использовать в индексе или статистике или в качестве ключа раздела, поскольку он недетерминирован. Аналогичная ошибка возникает, если я пытаюсь использоватьPERSISTED
при определении столбца. - person Edward Brey   schedule 10.05.2014