Gestire documenti XML da una query tramite OPENXML

Offrimi un Caffè

Dalla versione 2005 di SQL Server, ci sono state importanti novità, fra le quali:

  • - Miglioramento delle funzioni FOR XML e OPENXML
  • - Caricamento di di notevoli quantità di dati XML
  • - Supporto al tipo di dati XML
  • - Possibilità di eseguire una XQuery su un XML

Di seguito viene riportato un esempio in cui da una query si vuole caricare un file XML da gestire in un secondo momento.

Partendo da un file XML con la seguente struttura:

Tracciato XML

 

Si procederà all'importazione del file

 

if object_id('LI_tmp_State_xml') is null
    create table LI_tmp_State_xml (Id int identity primary key, XmlDoc xml, loaded_date datetime default getdate());
go
truncate table LI_tmp_State_xml;
go
insert into LI_tmp_State_xml(XmlDoc)
select convert(xml, BulkColumn) as BulkColumn
from openrowset(bulk 'D:\File.xml', single_blob) as XmlDoc;

Lo script sopra (da eseguirsi in una query), importa il file XML in un campo della tabella LI_tmp_State_xml appena creata.

Di seguito i dati importati, vengono interpretati dalla script sottostante:

declare @xmlDoc as xml, @hDoc as int, @sql nvarchar(max);

select @xmlDoc = XmlDoc from LI_tmp_State_xml;
exec sp_xml_preparedocument @hDoc output, @xmlDoc;

SELECT * FROM LI_tmp_State_xml

select *
from openxml(@hDoc, 'Auxdata/Elements/Element')
with
(
    Code varchar(5) '(Field[@name = "Code"])',
    Country varchar(50) '(Field[@name = "Country"])',
    IntraEU varchar(50) '(Field[@name = "IntraEU"])',
    CountryCode varchar(50) '(Field[@name = "CountryCode"])'
)

exec sp_xml_removedocument @hDoc;

Prestare molta attenzione ai colori di questo script con quelli presenti nell'XML.