ので、Viewを使おう
タイトルそのまんまなのですが、SQL ServerのComputed Columnの計算結果は別のComputed Columnで参照するとエラーになります。
CREATE TABLE [dbo].[Orders] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [CustomerId] INT NOT NULL, [BillingDate] DATE NOT NULL, [TaxableAmount] INT NOT NULL, [TaxFreeAmount] INT NOT NULL DEFAULT (0), [SalesTax] AS ISNULL([dbo].[ufnCalcSalesTax]([TaxableAmount], [BillingDate]), 0), [TotalAmount] AS [TaxableAmount] + [SalesTax] + [TaxFreeAmount] ) CREATE FUNCTION [dbo].[ufnCalcSalesTax] ( @amount int, @date date ) RETURNS INT AS BEGIN RETURN ( CAST(@amount * CASE WHEN @date >= '2014-4-1' THEN 0.08 WHEN @date >= '1997-4-1' THEN 0.05 WHEN @date >= '1989-4-1' THEN 0.03 ELSE 0.0 END AS INT) ); END
計算列[TotalAmount]の中で別の計算列[SalesTax]を参照しているため、エラーとなります。
Computed column 'SalesTax' in table 'Orders' is not allowed to be used in another computed-column definition.
こういう場合は、Viewを使うことになるようです。
CREATE VIEW [dbo].[vOrders] AS SELECT [Id] ,[CustomerId] ,[BillingDate] ,[TaxableAmount] ,[TaxFreeAmount] ,[SalesTax] ,([TaxableAmount] + [SalesTax] + [TaxFreeAmount]) as [TotalAmount] FROM [dbo].[Orders]