Generazione di XML da set di righe con FOR XMLGenerate XML from Rowsets with FOR XML

È possibile generare un'istanza del tipo di dati xml da un set di righe utilizzando FOR XML con la nuova direttiva TYPE .You can generate an xml data type instance from a rowset by using FOR XML with the new TYPE directive.

Il risultato può essere assegnato a una colonna, a una variabile o a un parametro con tipo di dati xml .The result can be assigned to an xml data type column, variable, or parameter. L'istruzione FOR XML può essere inoltre nidificata, consentendo di creare qualsiasi tipo di struttura gerarchica.Also, FOR XML can be nested to generate any hierarchical structure. Le istruzioni FOR XML nidificate sono molto più facili da scrivere rispetto a FOR XML EXPLICIT, ma forniscono prestazioni inferiori in caso di gerarchie con numerosi livelli.This makes nested FOR XML much more convenient to write than FOR XML EXPLICIT, but it may not perform as well for deep hierarchies. L'istruzione FOR XML introduce inoltre una nuova modalità PATH,FOR XML also introduces a new PATH mode. che specifica il percorso dell'albero XML in cui compare un determinato valore di colonna.This new mode specifies the path in the XML tree where a column's value appears.

La nuova direttiva FOR XML TYPE consente di definire visualizzazioni XML in sola lettura su dati relazionali con la sintassi SQL.The new FOR XML TYPE directive can be used to define read-only XML views over relational data with SQL syntax. Su tale vista è possibile eseguire query utilizzando istruzioni SQL e istruzioni XQuery incorporate, come illustrato nell'esempio seguente.The view can be queried with SQL statements and embedded XQuery, as shown in the following example. È possibile fare riferimento a tali viste SQL anche nelle stored procedure.You can also refer to these SQL views in stored procedures.

Esempio: visualizzazione SQL che restituisce un tipo di dati xml generatoExample: SQL View Returning Generated xml Data Type

La definizione di vista SQL seguente crea una visualizzazione XML su una colonna relazionale, utilizzando la chiave primaria e gli autori dei libri recuperati da una colonna XML:The following SQL view definition creates an XML view over a relational column, pk, and book authors retrieved from an XML column:

CREATE VIEW V (xmlVal) AS  
SELECT pk, xCol.query('/book/author')  
FROM   T  
FOR XML AUTO, TYPE  

La vista V contiene una singola riga con una singola colonna con nome xmlVal e tipo XML. Può essere utilizzata nelle query come una normale istanza del tipo di dati xml .The V view contains a single row with a single columnxmlVal of XML type. It can be queried like a regular xml data type instance. La query seguente, ad esempio, restituisce il nome dell'autore, "David":For example, the following query returns the author whose first name is "David":

SELECT xmlVal.query('//author[first-name = "David"]')  
FROM   V  

Le definizioni delle viste SQL sono analoghe alle visualizzazioni XML create utilizzando schemi con annotazioni,SQL view definitions are somewhat similar to XML views that are created by using annotated schemas. ma esistono alcune differenze importanti.However, there are important differences. La definizione della vista SQL è in modalità di sola lettura e deve essere modificata tramite istruzioni XQuery incorporate.The SQL view definition is read-only and must be manipulated with embedded XQuery. Le viste XML vengono create utilizzando schemi con annotazioni.The XML views are created by using annotated schema. Inoltre, in una vista SQL il risultato XML viene materializzato prima di applicare l'espressione XQuery, mentre le query XPath sulle viste XML restituiscono query SQL sulle tabelle sottostanti.Additionally, the SQL view materializes the XML result before applying the XQuery expression, while the XPath queries on XML views evaluate SQL queries on the underlying tables.

Vedere ancheSee Also

FOR XML (SQL Server)FOR XML (SQL Server)