解析看起来像简化的 nvarchar 值 XML
Parse nvarchar value that looks like a simplified XML
我有一个 nvarchar(1000)
类型的列,其中包含看起来像 XML
:
的内容
<Master>
<NodeA>lorem ipsum</NodeA>
<NodeB>lorem ipsum</NodeB>
<NodeC>lorem ipsum</NodeC>
<NodeD>lorem ipsum</NodeD>
</Master>
值 might
有一些回车 return 和嵌入的新行。
获取 NodeA
中的值的最简单方法是什么?
我尝试删除硬编码字符串值 <masterA>
但后来我觉得我做错了什么。
试试这个:
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)
) ,并且在存储方面也进行了优化。
我有一个 nvarchar(1000)
类型的列,其中包含看起来像 XML
:
<Master>
<NodeA>lorem ipsum</NodeA>
<NodeB>lorem ipsum</NodeB>
<NodeC>lorem ipsum</NodeC>
<NodeD>lorem ipsum</NodeD>
</Master>
值 might
有一些回车 return 和嵌入的新行。
获取 NodeA
中的值的最简单方法是什么?
我尝试删除硬编码字符串值 <masterA>
但后来我觉得我做错了什么。
试试这个:
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)
) ,并且在存储方面也进行了优化。