簡體   English   中英

具有特定值的SQL Server XML查詢

[英]SQL Server XML Querying with specific value

我在xml類型的表列之一中具有如下所示的XML

<fields>
  <field>
    <name>SourceFileName</name>
    <value>ABCD</value>
  </field>
  <field>
    <name>Template</name>
    <value>XYZ</value>
  </field>
</fields>

我需要查詢XML以獲取字段/名稱節點中特定文本的值

我使用下面的SQL,但第二個不返回任何數據

SELECT *
FROM   xmltable
WHERE  XMLText.value('(/fields/field/name)**[1]**' ,'varchar(max)') LIKE 
       'Template'

SELECT *
FROM   xmltable
WHERE  XMLText.value('(/fields/field/name)**[1]**' ,'varchar(max)') LIKE 
       'SourceFileName'

而下面的返回數據

SELECT *
FROM   xmltable
WHERE  XMLText.value('(/fields/field/name)**[2]**' ,'varchar(max)') LIKE 
       'Template'

有人可以幫忙,我如何編寫一個通用查詢以根據傳遞的名稱返回數據?

如果要處理多個 XML元素,則需要使用.nodes() XQuery函數。

嘗試這樣的事情:

SELECT
    Name = XC.value('(name)[1]', 'varchar(50)'),
    [Value] = XC.value('(value)[1]', 'varchar(25)')
FROM
    dbo.XmlTable
CROSS APPLY
    XmlText.nodes('/fields/field') AS XT(XC)

.nodes()調用將創建一個“偽”表XT其中的單列XC包含與該XPath表達式匹配的XML片段-在您的情況下,您將獲得兩行,每行代表<field>元素之一。

現在,您可以“進入”這些XML片段,並使用.value()調用提取所需的數據-並通過以下方式獲得兩個 <field>元素的名稱和值:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM