2017-02-24 124 views
2

我需要一些帮助从存储XML数据的nvarchar(max)列中提取数据。从Nvarchar(MAX)返回XML数据

以下是样本数据。

<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
    <string>B1-10</string> 
    <string>B2-20</string> 
    <string>B2-20</string> 
</ArrayOfstring> 

我已经尝试这样做,只返回NULL当时的错误,走出去“的XML解析:1号线,字符2,非法限定名称字符”

SELECT cast(COLUMNNAME AS xml).value('/ArrayOfString[1]/String[1]', 'VARCHAR(MAX)') 
FROM dbo.TABLENAME 

我已经试过无数的想法关闭这真棒网站似乎都有相同的结果。我在这里错过了什么?在此先感谢您的帮助。

+0

不知道我理解你为什么铸造XML如果你说的列存储XML类型? – user2065377

+0

如果您需要XML数据作为关系,您可以查看这篇文章http://stackoverflow.com/questions/38826788/read-value-from-a-complex-xml-structure-using-sql-server?rq=1 – user2065377

+0

出于好奇,你是否首先尝试在CAST AS VARCHAR(4000)中包装值来“下调”它? – 3BK

回答

1

试试这个:

;WITH XMLNAMESPACES(DEFAULT 'http://schemas.microsoft.com/2003/10/Serialization/Arrays', 
        'http://www.w3.org/2001/XMLSchema-instance' AS i) 
SELECT cast(COLUMNNAME AS xml).value('(/ArrayOfstring/string)[1]', 'VARCHAR(MAX)') 
FROM dbo.TABLENAME 
+0

这样做。感谢您的帮助 – WillG771

+0

很高兴听到!如果这是您的正确解决方案,请接受我的回答。谢谢! –