Aggiunta di una logica di business ai dati XMLAdd Business Logic to XML Data

Per aggiungere una logica di business ai dati XML è possibile procedere in vari modi:Your business logic can be added to XML data in several ways:

  • È possibile creare vincoli a livello di riga o colonna per applicare vincoli specifici del dominio durante la modifica e l'inserimento dei dati XML.You can write row or column constraints to enforce domain-specific constraints during insertion and modification of XML data.

  • È possibile creare sulla colonna XML un trigger che viene attivato all'inserimento o all'aggiornamento dei valori nella colonna.You can write a trigger on the XML column that fires when you insert or update values in the column. Tale trigger può contenere regole di convalida specifiche del dominio o popolare tabelle di proprietà.The trigger can contain domain-specific validation rules or populate property tables.

  • Il motore di database include la possibilità di eseguire codice gestito.The Database Engine includes the ability execute managed code. È possibile usare l'integrazione con CLR (Common Language Runtime) per creare funzioni in codice gestito a cui passare valori XML e usare le funzionalità di elaborazione XML offerte dallo spazio dei nomi System.Xml.You can use this common language runtime (CLR) integration to write functions in managed code to which you pass XML values, and use XML processing capabilities provided by the System.Xml namespace. Ad esempio è possibile applicare la trasformazione XSL ai dati XML.An example is to apply XSL transformation to XML data. In alternativa è possibile deserializzare il valore XML in una o più classi gestite ed utilizzare il codice gestito per agire su tali classi.Alternatively, you can deserialize the XML into one or more managed classes and operate on them by using managed code.

  • È possibile creare funzioni e stored procedure Transact-SQL che avviano l'elaborazione della colonna XML in base alle esigenze aziendali.You can write Transact-SQL stored procedures and functions that start the processing on the XML column for your business needs.

Esempio: applicazione della trasformazione XSLExample: Applying XSL Transformation

Si consideri una 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 codice XML trasformato come risultato.Consider a CLR function TransformXml() that accepts an xml data type instance and an XSL transformation stored in a file, applies the transformation to the XML data, and then returns the transformed XML in the result. Di seguito è riportato lo scheletro della funzione scritta in C#:Following is a skeleton function that is written 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-SQLTransact-SQL definita dall'utente SqlXslTransform() corrispondente a TransformXml()è possibile chiamare la funzione da Transact-SQL come illustrato nella query seguente:After the assembly is registered and a user-defined Transact-SQLTransact-SQL function is created, SqlXslTransform() corresponding to TransformXml(), the function can be invoked from Transact-SQL as shown in the following query:

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.The query result contains a rowset of the transformed XML.

L'integrazione di CLR in SQL ServerSQL Server estende le possibilità di scomporre dati XML in tabelle o di promuovere le proprietà, nonché di eseguire query sui dati XML usando classi gestite nello spazio dei nomi System.Xml.The CLR integration into SQL ServerSQL Server expands the possibilities for decomposing XML data into tables or property promotion, and querying XML data by using managed classes in the System.Xml namespace. Per altre informazioni, vedere Dati XML (SQL Server).For more information, see XML Data (SQL Server).