选择数据我是新手,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