在存储过程中将 varchar 转换为数字时出错
Posted
技术标签:
【中文标题】在存储过程中将 varchar 转换为数字时出错【英文标题】:Error converting varchar to numeric in Stored Procedure 【发布时间】:2020-03-10 10:22:46 【问题描述】:我正在尝试将记录从 XML 文件插入到 SQL Server
表中。 XML 文件有一些 Depth
列的条目,其值与 ex 略有不同。 -8.67991800817151E-0
有人可以指导我如何将该值转换为十进制并插入到表格中吗?谢谢。
这是我的存储过程:
CREATE PROCEDURE [dbo].[IProjectData]
@xml XML
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO DHDStrainSet
SELECT
DHDStrainSet.value('(StrainID/text())[1]','VARCHAR(255)') AS StrainID,
DHDStrainSet.value('(Depth/text())[1]','decimal(18,3)') AS Depth,
DHDStrainSet.value('(Strain/text())[1]','decimal(18,10)') AS Strain,
DHDStrainSet.value('(ProjectID/text())[1]','VARCHAR(50)') AS ProjectID
FROM
@xml.nodes('/RSM3DDB/DHDStrainSet') AS TEMPTABLE(DHDStrainSet)
END
示例 XML 文件是:
<?xml version="1.0" standalone="yes"?>
<RSM3DDB>
<DHDStrainSet>
<StrainID>SB 1_1ef50386</StrainID>
<Depth>-5.001987E-9</Depth>
<Strain>0.99</Strain>
<ProjectID>Hoop</ProjectID>
</DHDStrainSet>
</RSM3DDB>
【问题讨论】:
如果您提供一个示例 xml,将会有所帮助。 嗨,jonathan,我已经用示例 xml 文件编辑了问题,其中有一个条目供您参考。 @Çöđěxěŕ 你能解释一下我该怎么做吗? @Shital 这不是有效的 xml,请您更新一下。 @Çöđěxěŕ 我已经更新了 【参考方案1】:XML 文件中有一些用于深度列的条目,其值与 ex 的值略有不同。 -8.67991800817151E-0。有人可以指导我如何将该值转换为十进制吗?
查看值-8.67991800817151E-0
无法转换为decimal
,您需要考虑将其转换为float
。
所以这一行:
DHDStrainSet.value('(Depth/text())[1]','decimal(18,3)') AS Depth,
需要更改为(将修复错误):
DHDStrainSet.value('(Depth/text())[1]','float') AS Depth,
所以在你所说的所有你想要一个decimal(10,3)
中,你可以将该值转换为一个decimal(10,3)
,例如:
convert(decimal(10,3), DHDStrainSet.value('(Depth/text())[1]','float')) AS Depth,
这将输出:-8.68
【讨论】:
以上是关于在存储过程中将 varchar 转换为数字时出错的主要内容,如果未能解决你的问题,请参考以下文章
SQL表单提示"从数据类型varchar转换为int时出错"
将数据类型 varchar 转换为数字时出错。插入语句[重复]
SQL Server 2012 将数据类型 varchar 转换为数字时出错