Condividi tramite


Aggiunta di una logica di business

Per aggiungere una logica di business ai dati XML è possibile procedere in vari modi:

  • È possibile creare vincoli a livello di riga o colonna per applicare vincoli specifici del dominio durante la modifica e l'inserimento dei dati XML.

  • È possibile creare sulla colonna XML un trigger che viene attivato all'inserimento o all'aggiornamento dei valori nella colonna. Tale trigger può contenere regole di convalida specifiche del dominio o popolare tabelle di proprietà.

  • A partire da SQL Server 2005, il Motore del database include la possibilità di esecuzione di un codice gestito. È possibile utilizzare l'integrazione con CLR (Common Language Runtime) per creare funzioni in codice gestito a cui passare valori XML e utilizzare le funzionalità di elaborazione XML offerte dallo spazio dei nomi System.Xml. Ad esempio è possibile applicare la trasformazione XSL ai dati XML. In alternativa è possibile deserializzare il valore XML in una o più classi gestite ed utilizzare il codice gestito per agire su tali classi.

  • È possibile creare funzioni e stored procedure Transact-SQL che avviano l'elaborazione della colonna XML in base alle esigenze aziendali.

Esempio: applicazione della trasformazione XSL

Si consideri la funzione CLR TransformXml(), che accetta un'istanza del tipo di dati xml e una trasformazione XSL archiviata in un file, applica la trasformazione ai dati XML e quindi restituisce il valore XML trasformato come risultato. Di seguito è riportato lo scheletro della funzione scritta in C#:

public static SqlXml TransformXml (SqlXml XmlData, string xslPath) {
   // Load XSL transformation
   XslCompiledTransform xform = new XslCompiledTransform();
   XPathDocument xslDoc = new XPathDocument (xslPath);
   xform.Load(xslDoc);

   // Load XML data 
   XPathDocument xDoc = new XPathDocument (XmlData.CreateReader());

   // Return the transformed value
   MemoryStream xsltResult = new MemoryStream();
   xform.Transform(xDoc, null, xsltResult);
   SqlXml retSqlXml = new SqlXml(xsltResult);
   return (retSqlXml);
} 

Dopo aver registrato l'assembly e creato la funzione Transact-SQL definita dall'utente SqlXslTransform(), che corrisponde a TransformXml(), è possibile richiamare la funzione da Transact-SQL come illustrato nella query seguente:

SELECT SqlXslTransform (xCol, 'C:\MyFile\xsltransform.xsl')
FROM    T
WHERE  xCol.exist('/book/title/text()[contains(.,"custom")]') =1

Il risultato della query contiene un set di righe con il valore XML trasformato.

L'integrazione con CRL in SQL Server estende le possibilità di scomporre dati XML in tabelle o di alzare il livello delle proprietà, nonché di eseguire query sui dati XML utilizzando classi gestite nello spazio dei nomi System.Xml. Per ulteriori informazioni, vedere Panoramica dell'integrazione con CLR (Common Language Runtime).

Vedere anche

Concetti