在存储过程中将 varchar 转换为数字时出错

Error converting varchar to numeric in Stored Procedure

我正在尝试将 XML 文件中的记录插入到 SQL Server table 中。 XML 文件有一些 Depth 列的条目,其值与 ex 略有不同。 -8.67991800817151E-0

有人可以指导我如何将该值转换为十进制并插入到 table 中吗?谢谢。

这是我的存储过程:

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>

The XML file has some entries for Depth column with values that are little different for ex. -8.67991800817151E-0. Can someone please guide me how to convert that value into decimal?

查看值 -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