我有一个存储过程,可以在我的本地环境和 QA 环境中正常工作。
但是在客户端的 UAT 环境中,它会给出错误
System.Data.SqlClient.SqlException:
Message number="8115" severity="16" state="8">将 nvarchar 转换为数据类型 numeric 的算术溢出错误。
它在安装在客户端位置的本地实例之一中也可以正常工作。我通过注释/取消注释代码行找到了给出错误的代码行并将其归零为
(
@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 传递给存储过程的搜索条件的一部分。在产品方下,我有 4 个产品类别,我需要合计除类型保护之外的所有基金价值。如果这 3 种类型的总和小于 @TotalHHInternalTo
我想在搜索结果中显示它。
我添加了isNumeric
条件来检查从 xml 中提取的值是否为数值。
但是我仍然收到溢出错误。