nullif () の問題に直面しています。以下の 3 つのシナリオを参照してください。
シナリオ 1:
declare @val money
declare @pctg money
select @val = 0.00
select @pctg = nullif(@val,'')
select @pctg
go
最初のシナリオでは、変数 @val に 0 を渡すと、@pctg 値が NULL として計算されます。@pctg 変数はさらに他の計算に使用され、null の結果になります。
シナリオ 1 の問題を解決するために、シナリオ 2 を実装しました。
declare @val money
declare @pctg money
select @val = 0.00
select @pctg = nullif(convert(varchar,@val),'')
select @pctg
go
これで期待される 0 が返され、計算も問題ありません。しかし、シナリオ 3 で述べたように、空の文字列を使用してもう 1 つのテストを実行しました。
declare @val money
declare @pctg money
select @val = ''
select @pctg = nullif(CONVERT(varchar,@val),'')
select @pctg
go
ここでは、null 値を返すことを期待していますが、空の文字列では最終値を null にする必要があるため、0 が返され、テストが失敗します。
シナリオ2の解決策がシナリオ3で失敗するので、誰か助けてください。
これら 3 つのシナリオすべてを処理する 1 つのソリューションが必要です。