Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

KRZYŻ ZASTOSUJ do przestrzeni nazw, podwęzły zwracają zduplikowane rekordy

Spróbuj tego:

;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)

Otrzymuję listę fragmentów XML dla każdego <Msds> i z tego pobieram ProductIdentifiers informacje. Dodatkowo z tego węzła otrzymuję również listę pod-fragmentów XML dla <Ingredients> węzły i pobieraj szczegółowe informacje z nich.

Mój wynik wygląda tak:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić dane pliku binarnego do binarnego pola SQL za pomocą prostej instrukcji INSERT?

  2. Ograniczenie klucza obcego może powodować cykle lub wiele ścieżek kaskadowych?

  3. Jak mogę zapytać o wartość w kolumnie SQL Server XML?

  4. IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY w SQL Server:jaka jest różnica?

  5. Przekonanie do regularnego serwisowania serwera SQL