[英]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>
幾個問題:
嘗試這個:
-- 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.