sql >> Database >  >> RDS >> Sqlserver

KRUIS TOEPASSEN op naamruimte, subknooppunten retourneren dubbele records

Probeer dit:

;WITH XMLNAMESPACES ('http://3ecompany.com/webservices/catalogitemxml' as CI)
SELECT 
    Identifier = CI.value('(CI:ProductIdentifiers[1]/CI:Identifier)[1]', 'varchar(9)'),
    CAS_Number = Ingred.value('(CI:Cas)[1]', 'varchar(20)'),
    Chemical_Name = Ingred.value('(CI:ChemicalName)[1]', 'varchar(100)')
FROM
    @XmlTable
CROSS APPLY
    XMLData.nodes('/ArrayOfCatalogItem/CatalogItem/CI:Msds') AS XT(CI)
CROSS APPLY
    CI.nodes('CI:Ingredients') AS XT18(Ingred)

Ik krijg een lijst met XML-fragmenten voor elke <Msds> knooppunt, en hieruit pak ik de ProductIdentifiers informatie. Bovendien krijg ik vanaf dit knooppunt ook een lijst met sub-XML-fragmenten voor de <Ingredients> knooppunten, en grijp hier gedetailleerd naar.

Mijn uitvoer ziet er als volgt uit:




  1. Hoe sla ik TIFF-bestanden op in Oracle?

  2. Unieke samengestelde sleutel van SQL Server van twee velden met automatische verhoging van het tweede veld

  3. Hoe gegevens uit een andere tabel te halen met behulp van kolomgegevens uit een andere tabel?

  4. Hoe toegang te krijgen tot de procedure die een reeks refcursor retourneert van PostgreSQL in Java?