水曜日には完全に機能していたストアド プロシージャが、適切に機能しなくなりました。私はコードを変更していませんが、何らかの理由で同じように動作していません。
動作しないコード スニペットは次のとおりです。
WITH Minimum AS (SELECT DataTable.PortID, [Rating Max],
CASE When [Rating Max] <= [Sector Max] And [Rating Max] <= [ConcAfterUnwritten] And [Rating Max] <= [NatAfterUnwritten] And [Rating Max] <= [CashMaxAfterUnwritten] And [Rating Max] <= MatAfterUnwritten And [Rating Max] <= MatAfterInitialConcentration Then [Rating Max]
When [Sector Max] <= [ConcAfterUnwritten] And [Sector Max] <= [NatAfterUnwritten] And [Sector Max] <= CashMaxAfterUnwritten And [Sector Max] <= MatAfterUnwritten And [Sector Max] <= MatAfterInitialConcentration Then [Sector Max]
When ConcAfterUnwritten <= NatAfterUnwritten And ConcAfterUnwritten <= CashMaxAfterUnwritten And ConcAfterUnwritten <= MatAfterUnwritten And ConcAfterUnwritten <= MatAfterInitialConcentration Then ConcAfterUnwritten
When NatAfterUnwritten <= CashMaxAfterUnwritten And NatAfterUnwritten <= MatAfterUnwritten And NatAfterUnwritten <= MatAfterInitialConcentration Then NatAfterUnwritten
When CashMaxAfterUnwritten <= MatAfterUnwritten And CashMaxAfterUnwritten <= MatAfterInitialConcentration Then CashMaxAfterUnwritten
When MatAfterUnwritten <= MatAfterInitialConcentration Then MatAfterUnwritten
Else MatAfterInitialConcentration
End As [Min Of 5 Restrictions]
FROM DataTable)
UPDATE DataTable
Set
DataTable.MinOf5Restrictions = Minimum.[Min Of 5 Restrictions],
DataTable.MktValueAllocation = IIF(Minimum.[Min Of 5 Restrictions] < DataTable.MatAfterInitialConcentration, 0, DataTable.MatAfterInitialConcentration),
DataTable.ModelParAmount = IIf([MktValueAllocation]=0,0,Round([MktValueAllocation]/([$Px+Acc]*10)/5,0,1)*5),
DataTable.AllocatedPar = IIF(DataTable.ModelParAmount = 0, 0, ParLots.AllocatedPar),
DataTable.[Check Cash And Concentration] = IIf(DataTable.[AllocatedPar]*[$Px+Acc]*10>[MinOf5Restrictions],[ModelParAmount],DataTable.[AllocatedPar]),
DataTable.[Final After State Switch] = IIf([StateOnly]='TRUE',IIf([RestrictionType]='Specific',[Check Cash And Concentration],0),[Check Cash And Concentration])
FROM
((DataTable INNER JOIN Minimum ON DataTable.PortID = Minimum.PortID) LEFT JOIN ParLots ON DataTable.ModelParAmount = ParLots.ModelPar) INNER JOIN TestSet ON DataTable.PortID = TestSet.PortID, Main;
私の現在の問題は、必要な結果を得るためにクエリを 6 回実行する必要があることです。基本的に、UPDATEステートメントは、6つすべてを一度に実行するのではなく、実行するたびに1つの列のみを更新しているようです。最初に実行されたときに MinOf5Restrictions は入力されますが、他の列は入力されず、2 回目は MktValueAllocation が入力されますが、最後の 4 つはまだ空です。
なぜこれが考えられるのでしょうか?私はそれを6つの異なるUPDATEステートメントに分けることができると思いますが、特に以前に動作していたので、そうする必要がない場合はむしろしたくありません。
ありがとう