私はトリガーが初めてで、この質問に対する答えが見つからないようです。
テーブルに計算された行を挿入する必要がありますが、アプリケーションのソース コードにはアクセスできません。テーブルにトリガーを作成して、挿入された値に基づいて値を計算し、それらをテーブルに挿入することで回避できると思いましたが、これがどのように機能するかはわかりません。
次のトリガーがあります。更新には機能しますが、挿入には機能しません。「FOR INSERT、UPDATE」の「INSERT」を削除すると、account_id フィールド (唯一の非 null フィールド) が挿入されますが、残りは挿入されません。「INSERT」をそのままにしておくと、どのフィールドも挿入されません。
挿入と更新の両方でこれを機能させるにはどうすればよいですか?
ALTER TRIGGER [dbo].[SelfCalFieldsTrigger]
ON [dbo].[dynTable]
FOR INSERT, UPDATE
AS
BEGIN
Declare @acctID uniqueidentifier
Declare @invDiscPremPerc decimal(9,6)
Declare @investorSRP decimal(9,6)
Declare @purchWireAmt decimal(11,2)
set @acctID = (Select account_id from inserted)
set @invDiscPremPerc = (Select Coalesce(INVESTOR_DISC_PREM_DOLLAR, 0)/
Coalesce(INVESTOR_PRIN_BAL_PURCHASED, 0)*100 from inserted)
set @investorSRP = (Select Coalesce(INVESTOR_SRP_PREM_DOLLAR, 0)/
Coalesce(INVESTOR_PRIN_BAL_PURCHASED, 0)*100 from inserted)
set @purchWireAmt = (Select Coalesce(INVESTOR_PRIN_BAL_PURCHASED, 0)-
Coalesce(INVESTOR_ADMIN_FEE, 0)-
Coalesce(INVESTOR_WIRE_FEE, 0)- Coalesce(INVESTOR_FLOOD_FEE, 0)-
Coalesce(INVESTOR_TAX_SERVICE_FEE, 0) - Coalesce(INVESTOR_OTHER_FEE, 0) from
inserted)
UPDATE [dbo].dynTable]
set INVESTOR_DISC_PREM_PERCENT = @invDiscPremPerc,
INVESTOR_SRP = @investorSRP,
PURCHASE_WIRE_AMOUNT = @purchWireAmt
Where [dbo].[dynTable].Account_ID = @acctID
END