解析nvarchar值看起来像一个简化的XML

时间:2015-02-25 21:34:37

标签: sql-server xml tsql sql-server-2012

我有一个nvarchar(1000)类型的列,其中包含类似于XML的内容:

<Master>  
   <NodeA>lorem ipsum</NodeA>  
   <NodeB>lorem ipsum</NodeB>  
   <NodeC>lorem ipsum</NodeC>  
   <NodeD>lorem ipsum</NodeD>  
</Master>  

might有一些回车符并且嵌入了新行。

NodeA中获取值的最简单方法是什么?

我已尝试删除硬编码字符串值<masterA>,但后来我觉得我在这里做错了。

1 个答案:

答案 0 :(得分:2)

试试这个:

DECLARE @XmlTable TABLE (ID INT NOT NULL, XmlContent NVARCHAR(1000))

INSERT INTO @XmlTable (ID, XmlContent)
VALUES (1, N'<Master>  
   <NodeA>lorem ipsum</NodeA>  
   <NodeB>lorem ipsum</NodeB>  
   <NodeC>lorem ipsum</NodeC>  
   <NodeD>lorem ipsum</NodeD>  
</Master>')

SELECT
    CAST(XmlContent AS XML).value('(/Master/NodeA)[1]', 'varchar(50)')
FROM
    @XmlTable
WHERE
    ID = 1

但是如果您的专栏真的只存储XML - 您应该将其设为XML列 - 这更容易(在应用任何XQuery方法之前无需始终执行CAST(... AS XML)),并且它也在储存条款。