我不确定返回此值的正确元素/节点/或其他名称是什么,但这里是我的示例xml:
DECLARE @Input xml = '
<root>
<myValue>
<more></more>
<more></more>
</myValue>'
<root>
我想从这里得到的是&#34; myValue&#34;的结果。文字字符串,&#34; myValue&#34;是我的要求。那么也许第一个节点的名称可能是正确的表达方式呢?这是我尝试过的,我哪里出错了?
SELECT @Input.value('local-name(/*[1])','varchar(100)')
SELECT Nodes.Name.query('local-name(.)') FROM @Input.nodes('//*[1]') As Nodes(Name)
答案 0 :(得分:1)
这个问题很不清楚......
看一下这个例子,找到各种方法来阅读:
DECLARE @Input xml =
'<root>
<myValue>value 1
<more>more 1</more>
value 2
<more>more 2</more>
value 3
</myValue>
</root>';
- 从不同位置检索值
SELECT @Input.value('(/root/myValue/text())[2]','nvarchar(max)') AS SecondFloatingTextInMyValue
,@Input.value('(/root/myValue/more/text())[1]','nvarchar(max)') FirstMoreElement
,@Input.value('(/root/myValue/more/text())[2]','nvarchar(max)') SecondMoreElement;
- 获取<more>
- 元素
SELECT More.Nodes.value('(./text())[1]','nvarchar(max)') AS MoreValue
FROM @Input.nodes('/root/myValue/more') AS More(Nodes)
你的问题
我想从这里得到的是“myValue”
的价值
似乎在寻找元素的值,但是 - 正如你的自我回答所介绍的那样 - 你似乎在寻找元素名称,其中“more”只是一个例子... < / p>
请阅读How to ask a good SQL question和How to create a MCVE
阅读元素的元数据 - 正如您自己发现的那样 - 使用local-name()
:
DECLARE @Input xml =
'<root>
<myValue>
<OneValue></OneValue>
<Another></Another>
</myValue>
</root>';
SELECT nd.value('local-name(.)','nvarchar(max)') AS NameOfNodeBelowMyValue
FROM @Input.nodes('/root/myValue/*') AS A(nd)
答案 1 :(得分:0)
我想通了,很抱歉打扰了。我不确定我在这里要做什么的技术术语,但在我的情况下,我的'myValue&#39; node保存动态查询所需的dbo.Table对象的名称。
SELECT Nodes.Name.query('local-name(.)')
FROM @Input.nodes('/root/*[1]') As Nodes(Name)