テーブル制約は同じトランザクションで実行されますか?読み取りコミットされた分離レベルとテーブル制約とのトランザクション
テーブルにいくつかの行を挿入するRead Committed分離レベルのトランザクションがあります。テーブルには、同じテーブルからいくつかの行を順番に選択する関数を呼び出す制約があります。
トランザクションについて何も知らなくても関数が実行されているようで、関数内のselect関数は、トランザクションの前にあったテーブルの行を返します。
回避策はありますか、それとも不足していますか?ありがとう。ここで
トランザクションと制約のためのコードは次のとおりです。
insert into Treasury.DariaftPardakhtDarkhastFaktor
(DarkhastFaktor, DariaftPardakht, Mablagh, CodeVazeiat,
ZamaneTakhsiseFaktor, MarkazPakhsh, ShomarehFaktor, User)
values
(@DarkhastFaktor, @DariaftPardakht, @Mablagh, @CodeVazeiat,
@ZamaneTakhsiseFaktor, @MarkazPakhsh, @ShomarehFaktor, @User);
constraint expression (enforce for inserts and updates):
([Treasury].[ufnCheckDarkhastFaktorMablaghConstraint]([DarkhastFaktor])=(1))
ufnCheckDarkhastFaktorMablaghConstraint:
returns bit
as
begin
declare @SumMablagh float
declare @Mablagh float
select @SumMablagh = isnull(sum(Mablagh), 0)
from Treasury.DariaftPardakhtDarkhastFaktor
where DarkhastFaktor= @DarkhastFaktor
select @Mablagh = isnull(MablaghKhalesFaktor, 0)
from Sales.DarkhastFaktor
where DarkhastFaktor= @DarkhastFaktor
if @Mablagh - @SumMablagh < -1
return 0
return 1
end
私は行を削除したくありません。私はちょうど私が現在のトランザクションで挿入している行を見ることができるように(チェック制約によって呼び出される)関数が必要です。 – reticent
@reticent - あなたが挿入している場合、関数は行を見るべきです。私が編集した例を参照してください。 – ahains