簡體   English   中英

SQL Server-查詢XML數據類型

[英]SQL Server - Querying XML DataType

在將數據收集到SQL Server表中的同時,我導入了幾個XML文件。

我需要查詢此XML數據列,以將單個XML列轉換為結構更清晰的表。

有人可以在這里提供語法幫助嗎,XML結構具有某種模式,因此一旦以SQL XML.query格式理解,對於我想要的所有元素都應該易於重復。

Select TOP 1
   [XMLFILE].value('(/Objs/Obj[0]/TN)[0]','VARCHAR(MAX)') as TEST,
   [XMLFILE].query('/Objs/Obj') as HEADERTEST,
   [XMLFILE].query('/Ref[@id="0"]')  as Property1
FROM 
   SQL_Table

上面只是為我嘗試的每個模式返回一個空字符串。

我需要提取每個obj []元素的名稱和值。

XML結構示例,即objs標頭,后跟obj節點0到“ x”節點。

<?xml version="1.0"?>
<Objs xmlns="xxxx" Version="1.1.0.1">
  <Obj RefId="0">
    <TN RefId="0">
      <T>xxxx/T>
      <T>xxxxx</T>
      <T>xxxx</T>
    </TN>
    <MS>
      <S N="Name">xxxx</S>
      <S N="Value">xxxx</S>
    </MS>
  </Obj>
  <Obj RefId="1">
    <TNRef RefId="0"/>
    <MS>
      <S N="Name">xxxxxx</S>
      <S N="Value"/>
    </MS>
  </Obj>
  <Obj RefId="2">
    <TNRef RefId="0"/>
    <MS>
      <S N="Name">xxxxx</S>
      <S N="Value"/>
    </MS>
  </Obj>
  <Obj RefId="3">
    <TNRef RefId="0"/>
    <MS>
      <S N="Name">xxxx</S>
      <S N="Value"/>
    </MS>
  </Obj>
......
......
</Objs>

幾個問題:

  1. 您不尊重在XML頂級節點上定義的XML名稱空間
  2. 您沒有從XML獲取適當的節點

嘗試這個:

-- replace the 'xxx' with whatever is really defined in your <Objs xmlns=....> 
;WITH XMLNAMESPACES(DEFAULT 'xxxx')  
SELECT
    RefId = xc.value('@RefId', 'int'),
    Name = xc.value('(MS/S[@N="Name"])[1]', 'varchar(20)'),
    Value = xc.value('(MS/S[@N="Value"])[1]', 'varchar(20)')
FROM 
   SQL_Table
CROSS APPLY
    XmlFile.nodes('/Objs/Obj') AS XT(XC)

CROSS APPLY產生上即時 XML片段的虛擬表為該匹配XPath表達式中的每個XML節點-這里,對於每個<Obj>節點下<Objs>

然后,XQuery方法.value() “到達”該XML片段(針對該虛擬表中的每個片段),並提取必要的所需信息-這里是<Obj>節點上的RefId屬性以及文本<MS>/<SN="Name"><MS>/<SN="Value">子節點的<MS>/<SN="Value">

暫無
暫無

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

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