sql-server-2005 で (C フレーズを借用するために) いくつかの xml 構造体を作成する必要があります。これを行うために、すべての値を varchar に変更します。これらの値を使用したいときに問題が発生します。それらを10進数に変換する必要があります。
したがって、私の xml コードは次のようになります。
set @result = @result + <VAL>' + coalesce(cast(@val as varchar(20)), '-.11111') + '</VAL>'
このようにして、VAL が null の場合、特別な 10 進数を返し、その 10 進数をチェックできます。これを行うことの欠点は、値を使用するときに相手側で合体を使用できないことです。変換された値が 0 に等しいかどうかを確認する必要があります。次のように:
case when cast(InvestmentReturn.fn_getSTRUCT(...args...).value('results[1]/VAL[1]', 'varchar(40)')as decimal(10,5)) = -.11111
現時点ではパフォーマンスが受け入れられないため、パフォーマンスを改善する方法の 1 つは、入れ子になった case ステートメントを使用する代わりに、coalesce を使用して、特別な「null」に相当する値と等しいかどうかをチェックすることではないかと考えました。
何かご意見は?
また、 select cast('null' as decimal(10,5)) が私に与えることがわかります:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.