在存储过程中将 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
我正在尝试将 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