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

时间:2019-11-14 12:45:03

标签: sql vb.net stored-procedures sqldatatypes

我正在尝试将记录从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>

1 个答案:

答案 0 :(得分:0)

  

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