選擇數據我是新手,SQL和XML。我的目標是從客戶塊內的所有元素,但在SELECT沒有返回任何數據獲取數據。沒有命名空間查詢的作品。從XML命名空間
你能幫忙嗎?
DECLARE @x XML='<BusinessEvent Name="FO.Client">
<ClientMessage xmlns="http://www.fwbs.net/Aderant.BO.Integration/FO.MessageTypes.xsd">
<OriginatingProcessIdentity></OriginatingProcessIdentity>
<Operation></Operation>
<IsDataIncluded></IsDataIncluded>
<Clients>
<Client>
<GlobalId></GlobalId>
<ClID>g</ClID>
<No></No>
<Type></Type>
<Name></Name>
<BrCode></BrCode>
<Created></Created>
<FeeUsrID></FeeUsrID>
<DefaultAddID></DefaultAddID>
<ContID></ContID>
</Client>
</Clients>
</ClientMessage>
</BusinessEvent>'
;WITH XMLNAMESPACES
(DEFAULT 'http://www.fwbs.net/Aderant.BO.Integration/FO.MessageTypes.xsd')
SELECT TOP 10 cl.c.value('(text())[1]', 'varchar(20)') clid
FROM (SELECT @x data) data
CROSS APPLY [data].nodes('/BusinessEvent/ClientMessage/Clients/Client/ClID') AS cl(c)
答案@marc_s給你幫助你使用命名空間(雖然你使用'DEFAULT'的解決方案是可以的,但如果你只改變了....節點('/ *:BusinessEvent ...')來通配最外層節點的名字空間。一個提示:如您想獲得*從客戶端塊*內的所有元素的數據,你應該停止'XPath'在'.nodes()'客戶端後,讀取與'c.value(「CLID [每個元素1]」, '爲nvarchar(最大)')'。這允許你使用相同的'CROSS APPLY'來處理所有的內部元素。 – Shnugo