Ho un po 'di dati XML in una tabella di SQL Server in una colonna XML come segue:SQL Server XQuery con namespace di default
<AffordabilityResults>
<matchlevel xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">IndividualMatch</matchlevel>
<searchdate xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">2013-07-29T11:20:53</searchdate>
<searchid xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">{E40603B5-B59C-4A6A-92AB-98DE83DB46E7}</searchid>
<calculatedgrossannual xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">13503</calculatedgrossannual>
<debtstress xmlns="urn:callcredit.co.uk/soap:affordabilityapi2">
<incomedebtratio>
<totpaynetincome>0.02</totpaynetincome>
<totamtunsecured>0.53</totamtunsecured>
<totamtincsec>0.53</totamtincsec>
</incomedebtratio>
</debtstress>
</AffordabilityResults>
noterete che alcuni degli elementi hanno un attributo xmlns e un po' non ...
Ho bisogno di scrivere query per restituire i dati e, cosa più importante, mostrare a un analista di business come scrivere le proprie query per ottenere i dati di cui ha bisogno, quindi voglio che sia il più semplice possibile.
posso interrogare i dati in modo semplice utilizzando l'elemento con XMLNAMESPACES come segue:
WITH XMLNAMESPACES (N'urn:callcredit.co.uk/soap:affordabilityapi2' as x)
SELECT
ResponseXDoc.value('(/AffordabilityResults/x:matchlevel)[1]','varchar(max)') AS MatchLevel
, ResponseXDoc.value('(/AffordabilityResults/x:debtstress/x:incomedebtratio/x:totamtunsecured)[1]','nvarchar(max)') AS UnsecuredDebt
FROM [NewBusiness].[dbo].[t_TacResults]
Ma aggiungendo la x: parte alla query lo fa apparire troppo complicato, e voglio mantenere le cose semplici per il business analista.
Ho provato ad aggiungere:
WITH XMLNAMESPACES (DEFAULT 'urn:callcredit.co.uk/soap:affordabilityapi2')
e rimuovendo la x: dal XQuery - ma questo restituisce un valore nullo
C'è qualche (forse a causa della mancanza dei xmlns sull'elemento root?) modo in cui posso semplificare queste query con o senza lo spazio dei nomi predefinito?
destro, il problema è che '' non è in uno spazio dei nomi, in modo che quando si esegue una query elementi nel 'urn: callcredit.co.uk ...' namespace di default, non si riesce a selezionarlo. Purtroppo non c'è modo di assegnare un prefisso a no-namespace, quindi penso che si deve utilizzare prefissi sugli elementi namespace. –
wst