Condividi tramite


Formattazione XML sul lato client (SQLXML 4.0)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Questo argomento fornisce informazioni sulla formattazione XML sul lato client. Per formattazione sul lato client si intende la formattazione di dati XML nel livello intermedio.

Nota

In questo argomento vengono fornite informazioni aggiuntive sull'utilizzo della clausola FOR XML sul lato client, con cui si suppone che l'utente disponga già di una certa familiarità. Per altre informazioni su FOR XML, vedere Costruzione di XML tramite FOR XML.

SQLNCLI11 è stata la prima versione del provider SQL Server a comprendere appieno i tipi di dati introdotti in SQL Server 2005 (9.x). Il comportamento per FOR XML sul lato client con il provider SQLOLEDB considererà i tipi di dati xml come stringhe.

Importante

SQL Server Native Client (SNAC) non viene fornito con:

  • SQL Server 2022 (16.x) e versioni successive
  • SQL Server Management Studio 19 e versioni successive

SQL Server Native Client (SQLNCLI o SQLNCLI11) e il provider OLE DB Microsoft legacy per SQL Server (SQLOLEDB) non sono consigliati per lo sviluppo di nuove applicazioni.

Per i nuovi progetti, usare uno dei driver seguenti:

Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni dal 2012 al 2019), vedere questa Eccezione relativa al ciclo di vita del supporto.

Formattazione di documenti XML sul lato client

Quando un'applicazione client esegue la query

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

Solo la parte seguente della query viene inviata al server:

SELECT FirstName, LastName  
FROM   Person.Contact  

Il server esegue la query e restituisce un set di righe (che contiene FirstName e LastNamecolumns) al client. Il livello intermedio applica quindi la trasformazione FOR XML al set di righe e restituisce la formattazione XML al client.

Analogamente, quando si esegue una query XPath il server restituisce il set di righe al client e la trasformazione FOR XML EXPLICIT viene applicata al set di righe nel client, generando la formattazione XML desiderata.

Nella tabella seguente vengono illustrate le modalità che è possibile specificare con la clausola FOR XML sul lato client.

Modalità FOR XML sul lato client Commento
RAW Produce risultati identici se specificata in FOR XML sul lato client o sul lato server.
NESTED È simile alla modalità FOR XML AUTO sul lato server.
EXPLICIT È simile alla modalità FOR XML EXPLICIT sul lato server.

Nota

Se si specifica la modalità AUTO e si richiede la formattazione XML sul lato client, l'intera query viene inviata al server, ovvero la formattazione XML viene eseguita nel server. Benché ciò avvenga per motivi di praticità, si noti che la modalità NESTED restituisce nomi di tabella di base nel documento XML generato. È possibile che alcune delle applicazioni scritte richiedano nomi di tabella di base. Ad esempio, è possibile eseguire una stored procedure e caricare i dati risultanti in un set di dati (in Microsoft .NET Framework) e quindi generare un DiffGram per aggiornare i dati nelle tabelle. In tal caso, sarà necessario disporre delle informazioni sulla tabella di base e utilizzare la modalità NESTED.

Vantaggi della formattazione XML sul lato client

Gli elementi seguenti costituiscono alcuni dei vantaggi della formattazione XML nel client.

Se nel server sono disponibili stored procedure che restituiscono un singolo set di righe, è possibile richiedere la trasformazione FOR XML sul lato client per generare un documento XML.

Si consideri, ad esempio, la stored procedure seguente. La procedura restituisce i nomi e i cognomi dei dipendenti inclusi nella tabella Person.Contact del database AdventureWorks.

IF EXISTS (SELECT name FROM sysobjects  
   WHERE name = 'GetContacts' AND type = 'P')  
   DROP PROCEDURE GetContacts  
GO  
CREATE PROCEDURE GetContacts  
AS  
    SELECT   FirstName, LastName  
    FROM     Person.Contact  

Il modello XML di esempio seguente esegue la stored procedure. La clausola FOR XML viene specificata dopo il nome della stored procedure.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <sql:query client-side-xml="1">  
    EXEC GetContacts FOR XML NESTED  
  </sql:query>  
</ROOT>  

Poiché l'attributo xml lato client è impostato su 1 (true) nel modello, la stored procedure viene eseguita nel server e il set di righe a due colonne restituito dal server viene trasformato in XML nel livello intermedio e restituito al client. Di seguito viene fornito solo un risultato parziale.

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact FirstName="Catherine" LastName="Abel" />  
</ROOT>  

Nota

Quando si usa il provider SQLXMLOLEDB o le classi gestite SQLXML, è possibile utilizzare la proprietà ClientSideXml per richiedere la formattazione XML sul lato client.

Il carico di lavoro risulta più bilanciato.

Poiché il client esegue la formattazione XML, il carico di lavoro viene bilanciato tra il server e il client, liberando il server per l'esecuzione di altre operazioni.

Supporto della formattazione XML sul lato client

Per supportare la funzionalità di formattazione XML sul lato client, SQLXML fornisce gli elementi seguenti:

  • provider SQLXMLOLEDB

  • classi gestite SQLXML

  • Supporto avanzato per modelli XML

  • Proprietà SqlXmlCommand.ClientSideXml

    È possibile specificare formattazione sul lato client impostando su true questa proprietà per le classi gestite SQLXML.

Supporto avanzato per modelli XML

A partire da SQL Server 2005 (9.x), il modello XML in SQL Server è stato migliorato con l'aggiunta dell'attributo xml lato client. Se questo attributo è impostato su true, i dati XML vengono formattati nel client. Si noti che questo attributo modello è identico nella funzionalità della proprietà ClientSideXML specifica del provider SQLXML.

Nota

Se si esegue un modello XML in un'applicazione ADO che usa il provider SQLXMLOLEDB e si specifica sia l'attributo xml sul lato client nel modello che la proprietà ClientSideXML del provider, il valore specificato nel modello ha la precedenza.

Vedi anche

Architettura della formattazione XML sul lato client e sul lato server (SQLXML 4.0)
FOR XML (SQL Server)
Considerazioni sulla sicurezza per FOR XML (SQLXML 4.0)
Supporto del tipo di dati xml in SQLXML 4.0
Classi gestite SQLXML
Formattazione XML lato client e lato server (SQLXML 4.0)
Oggetto SqlXmlCommand (classi gestite SQLXML)
Dati XML (SQL Server)