ローカル環境と QA 環境で問題なく動作するストアド プロシージャがあります。
ただし、クライアントの UAT 環境ではエラーが発生します
System.Data.SqlClient.SqlException:
メッセージ番号="8115" 重大度="16" 状態="8">nvarchar を数値データ型に変換する算術オーバーフロー エラー。
また、クライアントの場所にインストールされたローカル インスタンスの 1 つで正常に動作します。コード行にコメント/コメントを付けることでエラーを引き起こすコード行を見つけ、それをゼロにしました
(
@TotalHHInternalTo IS NULL
OR
(
IsNumeric(E.[Xml].value(
'declare default element namespace "http://www.xyz/1.0";
(/Event/Data/CustomData/DataXML/ProductData/ProductParty/ProductCategory[@code != ''Protection'']/Product/FundValue)[1]',
'nvarchar(50)'
) ) = 1
AND
EXISTS
(
SELECT
1
FROM E.[Xml].nodes(
'declare default element namespace "http://www.xyz/1.0";
/Event/Data/CustomData/DataXML/ProductData/ProductParty/ProductCategory[@code != ''Protection'']/Product') as P(E)
HAVING SUM(P.E.value(
'declare default element namespace "http://www.xyz/1.0";
(FundValue)[1]',
'decimal'
)) <= @TotalHHInternalTo
)
)
)
変数@TotalHHInternalTo
は、xml としてストアド プロシージャに渡される検索基準の一部である decimal 型のパラメーターです。Product party の下に 4 つの製品カテゴリがあり、タイプ Protection を除くすべての Fund 値を合計する必要があります。これら 3 つのタイプの合計が少ない場合 @TotalHHInternalTo
は、検索結果に表示したいと思います。
isNumeric
xml から取得した値が数値かどうかをチェックする条件を追加しました。
ただし、まだオーバーフロー エラーが発生します。