Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

LINTAS BERLAKU ke namespace, sub node mengembalikan catatan duplikat

Coba ini:

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

Saya mendapatkan daftar fragmen XML untuk setiap <Msds> simpul, dan dari sini saya mengambil ProductIdentifiers info. Plus, dari node ini, saya juga mendapatkan daftar sub-XML-fragmen untuk <Ingredients> node, dan ambil detailnya dari ini.

Output saya terlihat seperti ini:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Karakter Escape Pencarian Teks Lengkap?

  2. Masalah salin-tempel di SQL Server Management Studio

  3. Cara mendapatkan daftar Tabel tanpa Batasan Kunci Utama di Database SQL Server - Tutorial SQL Server / T-SQL Bagian 58

  4. Tutorial Surat Basis Data

  5. Apakah lebih baik menggunakan pengenal unik (GUID) atau bigint untuk kolom identitas?