Caricamento dati XMLLoad XML Data

È possibile trasferire dati XML in SQL Server 2017SQL Server 2017 in diversi modi.You can transfer XML data into SQL Server 2017SQL Server 2017 in several ways. Esempio:For example:

  • Se i dati si trovano in una colonna di tipo [n]text o image in un database di SQL ServerSQL Server , è possibile importare la tabella utilizzando Integration ServicesIntegration Services.If you have your data in an [n]text or image column in a SQL ServerSQL Server database, you can import the table by using Integration ServicesIntegration Services. Modificare il tipo di colonna in XML utilizzando l'istruzione ALTER TABLE.Change the column type to XML by using the ALTER TABLE statement.

  • È possibile eseguire una copia bulk dei dati da un altro database di SQL ServerSQL Server usando bcp out e quindi eseguire un inserimento bulk dei dati nel database di una versione successiva usando bcp in.You can bulk copy your data from another SQL ServerSQL Server database by using bcp out, and then bulk insert the data into the later version database by using bcp in.

  • Se i dati si trovano in colonne relazionali in un database di SQL ServerSQL Server , creare una nuova tabella con una colonna di tipo [n]text e, facoltativamente, una colonna chiave primaria per un identificatore di riga.If you have data in relational columns in a SQL ServerSQL Server database, create a new table with an [n]text column and, optionally, a primary key column for a row identifier. Usare la programmazione sul lato client per recuperare i dati XML generati nel server con FOR XML e scriverli nella colonna [n]text .Use client-side programming to retrieve the XML that is generated at the server with FOR XML and write it into the [n]text column. Usare quindi le tecniche illustrate in precedenza per trasferire i dati in un database di una versione successiva.Then, use the previously mentioned techniques to transfer data to a later version database. È possibile scegliere di scrivere i dati XML direttamente in una colonna XML nel database di una versione successiva.You can choose to write the XML into an XML column in the later version database directly.

Caricamento bulk di dati XMLBulk loading XML data

È possibile eseguire un caricamento bulk dei dati XML nel server utilizzando le funzionalità per il caricamento bulk disponibili in SQL ServerSQL Server, ad esempio bcp.You can bulk load XML data into the server by using the bulk loading capabilities of SQL ServerSQL Server, such as bcp. OPENROWSET consente di caricare dati in una colonna XML da uno o più file,OPENROWSET allows you to load data into an XML column from files. come illustrato nell'esempio seguente.The following example illustrates this point.

Esempio: caricamento di dati XML da un fileExample: Loading XML from Files

In questo esempio viene illustrato l'inserimento di una riga nella tabella T. Il valore della colonna XML viene caricato dal file C:\MyFile\xmlfile.xml come CLOB e alla colonna di tipo integer viene fornito il valore 10.This example shows how to insert a row in table T. The value of the XML column is loaded from file C:\MyFile\xmlfile.xml as CLOB, and the integer column is supplied the value 10.

INSERT INTO T  
SELECT 10, xCol  
FROM    (SELECT *      
    FROM OPENROWSET (BULK 'C:\MyFile\xmlfile.xml', SINGLE_CLOB)   
 AS xCol) AS R(xCol)  

Codifica del testoText Encoding

SQL ServerSQL Server archivia i dati XML in formato Unicode (UTF-16). stores XML data in Unicode (UTF-16). I dati XML recuperati dal server vengono restituiti con la codifica UTF-16.XML data retrieved from the server comes out in UTF-16 encoding. Se si desidera una codifica diversa, sarà necessario eseguire la conversione appropriata sui dati recuperati.If you want a different encoding, you have to perform the required conversion on the retrieved data. Per i dati XML viene talvolta utilizzata una codifica diversa.Sometimes, the XML data may be in a different encoding. In questo caso è necessario prestare particolare attenzione durante il caricamento dei dati.If it is, you have to use care during data loading. Esempio:For example:

  • Se il testo XML è in formato Unicode (UCS-2, UTF-16), sarà possibile assegnarlo senza problemi a una colonna, una variabile o un parametro XML.If your text XML is in Unicode (UCS-2, UTF-16), you can assign it to an XML column, variable, or parameter without any problems.

  • Se viene utilizzata una codifica implicita diversa da Unicode, a causa della tabella codici di origine, la tabella codici per le stringhe nel database dovrà essere uguale o compatibile con i punti di codice da caricare.If the encoding is not Unicode and is implicit, because of the source code page, the string code page in the database should be the same as or compatible with the code points that you want to load. Se necessario, utilizzare COLLATE.If required, use COLLATE. Se tale tabella codici non esiste sul server, sarà necessario aggiungere una dichiarazione XML esplicita con la codifica appropriata.If no such server code page exists, you have to add an explicit XML declaration with the correct encoding.

  • Per una codifica esplicita usare il tipo di dati varbinary() , che non interagisce in alcun modo con le tabelle codici, oppure usare un tipo stringa della tabella codici appropriata.To use an explicit encoding, use either the varbinary() type, which has no interaction with code pages, or use a string type of the appropriate code page. Assegnare quindi i dati a una colonna, a una variabile o a un parametro XML.Then, assign the data to an XML column, variable, or parameter.

Esempio: impostazione di una codifica in modo esplicitoExample: Explicitly Specifying an Encoding

Si consideri un documento XML di nome vcdoc, archiviato come varchar(max) e che non include una dichiarazione XML esplicita.Assume that you have an XML document, vcdoc, stored as varchar(max) that does not have an explicit XML declaration. L'istruzione seguente aggiunge una dichiarazione XML con la codifica "iso8859-1", concatena il documento XML, esegue il cast del risultato a varbinary(max) , in modo da mantenere la rappresentazione dei byte e infine esegue il cast al tipo di dati XML.The following statement adds an XML declaration with the encoding "iso8859-1", concatenates the XML document, casts the result to varbinary(max) so that the byte representation is preserved, and then finally casts it to XML. Questo consente al processore XML di analizzare i dati in base alla codifica specificata, "iso8859-1", e di generare la rappresentazione UTF-16 corrispondente per i valori stringa.This enables the XML processor to parse the data according to the specified encoding "iso8859-1" and generate the corresponding UTF-16 representation for string values.

SELECT CAST(   
CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ vcdoc) AS VARBINARY (MAX))   
 AS XML)  

Stringa che codifica le incompatibilitàString Encoding Incompatibilities

Se si copia e si incolla XML come un valore letterale stringa nella finestra dell'editor di query di SQL Server Management StudioSQL Server Management Studio, potrebbero verificarsi incompatibilità di codifica delle stringhe [N]VARCHAR,If you copy and paste XML as a string literal into the Query Editor window in SQL Server Management StudioSQL Server Management Studio, you might experience [N]VARCHAR string encoding incompatibilities. che dipendono dalla codifica dell'istanza XML utilizzata.This will depend on the encoding of your XML instance. In molti casi, è possibile rimuovere la dichiarazione XML.In many cases, you may want to remove the XML declaration. Esempio:For example:

<?xml version="1.0" encoding="UTF-8"?>  
  <xsd:schema …  

È quindi consigliabile inserire una N per rendere l'istanza XML un'istanza di Unicode.You should then include an N to make the XML instance an instance of Unicode. Esempio:For example:

-- Assign XML instance to a variable.  
DECLARE @X XML  
SET @X = N'…'  
-- Insert XML instance into an xml type column.  
INSERT INTO T VALUES (N'…')  
-- Create an XML schema collection  
CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema … '  

Vedere ancheSee Also

Dati XML (SQL Server)XML Data (SQL Server)