【问题标题】:Parse nvarchar value that looks like a simplified XML解析看起来像简化的 XML 的 nvarchar 值
【发布时间】:2015-02-25 21:34:37
【问题描述】:

我有一个 nvarchar(1000) 类型的列,其中包含看起来像 XML 的内容:

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

might 的值有一些回车和嵌入的新行。

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

我试图删除硬编码的字符串值&lt;masterA&gt;,但后来我觉得我在这里做错了。

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    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)),并且它还在存储方面进行了优化。

    【讨论】:

    • ...将 DB 字段更改为 XML 意味着我将删除 SELECT 语句中的 CASTING,对吗?
    • @SDDeveloper: 是的,它会启用某些不起作用CAST..... 的操作(例如使用.nodes() 函数CROSS APPLY 情况)
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 2017-01-13
    • 2010-10-28
    • 1970-01-01
    • 2010-10-07
    • 2011-03-25
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多