【问题标题】:Error converting varchar to numeric in Stored Procedure在存储过程中将 varchar 转换为数字时出错
【发布时间】: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ěŕ 我已经更新了

标签: sql vb.net stored-procedures sqldatatypes


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 2023-03-04
    • 1970-01-01
    • 2021-12-19
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多