Sql server 从使用逗号作为小数分隔符的XML中选择小数

Sql server 从使用逗号作为小数分隔符的XML中选择小数,sql-server,xml,Sql Server,Xml,我试图从XML文档中选择值,有些是十进制值,但它们在XML数据提要中用逗号而不是小数点分隔2,05而不是2.05。我相信这是写十进制数字的德国风格 无论如何,当我尝试选择数据类型nvarchar时,我得到了一个错误将数据类型nvarchar转换为数字时,我希望有某种方法可以使此查询工作,而不必对源数据进行预处理: DECLARE @XmlDoc INT DECLARE @XmlData VARCHAR(MAX) SET @XmlData = '<xml><sample>

我试图从XML文档中选择值,有些是十进制值,但它们在XML数据提要中用逗号而不是小数点分隔
2,05
而不是
2.05
。我相信这是写十进制数字的德国风格

无论如何,当我尝试选择数据类型nvarchar时,我得到了一个错误
将数据类型nvarchar转换为数字时,我希望有某种方法可以使此查询工作,而不必对源数据进行预处理:

DECLARE @XmlDoc INT
DECLARE @XmlData VARCHAR(MAX) 

SET @XmlData = '<xml><sample><decvalue>2,05</decvalue></sample></xml>'

EXEC sp_xml_preparedocument @XmlDoc OUTPUT, @XmlData

SELECT *
FROM OPENXML(@XmlDoc,'/xml/sample',2)                     
WITH (decvalue DECIMAL(10,2) 'decvalue')
DECLARE@XmlDoc INT
声明@XmlData VARCHAR(最大值)
SET@XmlData='2,05'
EXEC sp_xml_preparedocument@XmlDoc输出@XmlData
挑选*
来自OPENXML(@XmlDoc,'/xml/sample',2)
带(decvalue十进制(10,2)‘decvalue’)
试试这个-

查询:

DECLARE @XmlData XML 
SELECT @XmlData = '<xml><sample><decvalue>2,05</decvalue></sample></xml>'

SELECT CAST(REPLACE(t.c.value('decvalue[1]', 'VARCHAR(10)'), ',', '.') AS DECIMAL(10,2))
FROM @XmlData.nodes('/xml/sample') t(c)
2.05

而且,如果在运行
sp\u xml\u preparedocument
之后,您没有调用
sp\u xml\u removedocument
,则可能会在服务器上发生内存泄漏。这就解决了问题。我只是根据我的实际查询(更多列)调整它。一开始我以为它可能会有点乱,但实际上它很干净。谢谢