Utilizzo del formato nativo per l'importazione o l'esportazione di dati

L'utilizzo del formato nativo è consigliabile per il trasferimento bulk dei dati tra più istanze di MicrosoftSQL Server mediante un file di dati che non contiene caratteri estesi o DBCS.

[!NOTA]

Per il trasferimento bulk di dati tra più istanze di SQL Server mediante un file di dati contenente caratteri estesi o DBCS, è consigliabile utilizzare il formato nativo Unicode. Per ulteriori informazioni, vedere Utilizzo del formato Unicode nativo per importare o esportare dati.

Il formato nativo mantiene i tipi di dati nativi di un database e viene utilizzato per il trasferimento dei dati ad alta velocità tra le tabelle SQL Server. Se si utilizza un file di formato, non è necessario che le tabelle di origine e di destinazione siano identiche. Il trasferimento dei dati è costituito da due passaggi:

  1. Esportazione bulk dei dati da una tabella di origine in un file di dati

  2. Importazione bulk dei dati dal file di dati nella tabella di destinazione

L'utilizzo del formato nativo tra tabelle identiche consente di evitare la conversione di tipi di dati nel/dal formato carattere, risparmiando tempo e spazio. Per raggiungere la velocità di trasferimento ottimale, tuttavia, vengono eseguiti solo alcuni controlli relativi alla formattazione dei dati. Per evitare problemi relativi ai dati caricati, vedere l'elenco di restrizioni seguente.

Restrizioni

Per importare correttamente i dati in formato nativo, verificare quanto segue:

  • Il file di dati deve essere in formato nativo.

  • È necessario che la tabella di destinazione sia compatibile con il file di dati (deve includere il numero di colonne, il tipo di dati e la lunghezza corretti, lo stato NULL e così via). In alternativa, è necessario utilizzare un file di formato per eseguire il mapping tra ogni campo e le colonne corrispondenti.

    [!NOTA]

    Se si importano i dati da un file non corrispondente alla tabella di destinazione, è possibile che l'operazione di importazione riesca ma i dati della tabella di destinazione potrebbero non essere corretti. Ciò è dovuto al fatto che i dati del file vengono interpretati utilizzando il formato della tabella di destinazione. Pertanto, la mancata corrispondenza causa l'inserimento di valori non corretti ma in nessun caso può determinare inconsistenze di tipo logico o fisico nel database.

    Per informazioni sull'utilizzo dei file di formato, vedere File di formato per l'importazione o l'esportazione di dati.

Un'importazione corretta non danneggerà la tabella di destinazione.

Gestione dei dati in formato nativo mediante l'utilità bcp

In questa sezione sono contenute considerazioni particolari sull'importazione e sull'esportazione dei dati in formato nativo mediante l'utilità bcp.

  • Dati non di tipo carattere

    L'utilità bcp utilizza il formato di dati binario interno di SQL Server per trasferire dati non di tipo carattere da una tabella in un file di dati.

  • Dati char o varchar

    All'inizio di ogni campo char o varchar, l'utilità bcp aggiunge la lunghezza del prefisso.

    Nota importanteImportante

    Per impostazione predefinita, quando si utilizza la modalità nativa, l'utilità bcp converte i caratteri di SQL Server in caratteri OEM prima di copiarli in un file di dati. L'utilità bcp converte i caratteri di un file di dati in caratteri ANSI prima dell'importazione bulk in una tabella SQL Server. Durante queste conversioni può verificarsi la perdita dei dati con caratteri estesi. Per i caratteri estesi, è necessario utilizzare il formato nativo Unicode o specificare una tabella codici. Per ulteriori informazioni sull'utilizzo di una tabella codici, vedere Copia di dati tra regole di confronto diverse.

  • Dati sql_variant

    Se i dati sql_variant vengono archiviati come SQLVARIANT in un file di dati in formato nativo, verranno mantenute tutte le relative caratteristiche. I metadati che registrano il tipo di dati di ogni valore vengono archiviati insieme al valore stesso. Questi metadati vengono utilizzati per creare di nuovo il valore con lo stesso tipo di dati in una colonna di destinazione sql_variant.

    Se il tipo di dati della colonna di destinazione è diverso da sql_variant, ogni valore viene convertito nel tipo di dati della colonna di destinazione, in base alle regole standard di conversione implicita dei dati. Se si verifica un errore durante la conversione dei dati, viene eseguito il rollback del batch corrente. Per i valori char e varchar trasferiti tra colonne sql_variant possono verificarsi problemi relativi alla conversione di tabelle codici. Per ulteriori informazioni, vedere Copia di dati tra regole di confronto diverse.

    Per ulteriori informazioni sulla conversione dei dati, vedere Conversione del tipo di dati (Motore di database).

Opzioni di comando per il formato nativo

È possibile importare i dati in formato nativo in una tabella mediante il comando bcp, l'istruzione BULK INSERT o l'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...). Per un comando bcp o un'istruzione BULK INSERT è possibile specificare il formato dei dati nella riga di comando. Per un'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...) è necessario specificare il formato dei dati in un file di formato.

Il formato nativo viene supportato dalle opzioni della riga di comando seguenti:

Comando

Opzione

Descrizione

bcp

-n

Obbliga l'utilità bcp a utilizzare i tipi di dati nativi.1

BULK INSERT

DATAFILETYPE ='native'

Utilizza i tipi di dati nativi o nativi estesi. Si noti che DATAFILETYPE non è necessario se i tipi di dati vengono specificati in un file di formato.

1 Per caricare i dati nativi (-n) in un formato compatibile con le versioni precedenti dei client di SQL Server, utilizzare l'opzione -V. Per ulteriori informazioni, vedere Importazione di dati in formato nativo e carattere da versioni precedenti di SQL Server.

Per ulteriori informazioni, vedere Utilità bcp, BULK INSERT (Transact-SQL) o OPENROWSET (Transact-SQL).

[!NOTA]

In alternativa, è possibile definire la formattazione di ogni singolo campo in un file di formato. Per ulteriori informazioni, vedere File di formato per l'importazione o l'esportazione di dati.

Esempi

Negli esempi seguenti vengono illustrate le procedure per l'esportazione bulk dei dati nativi mediante il comando bcp e l'importazione bulk degli stessi dati mediante l'istruzione BULK INSERT.

Tabella di esempio

È necessario creare innanzitutto una tabella denominata myTestNativeData nel database di esempio AdventureWorks all'interno dello schema dbo, prima di eseguire le procedure illustrate negli esempi. Nell'editor di query di SQL Server Management Studio eseguire:

USE AdventureWorks;
GO
CREATE TABLE myTestNativeData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

Per popolare la tabella e visualizzare il contenuto risultante, eseguire le istruzioni seguenti:

INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3');
INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData

Utilizzo del comando bcp per l'esportazione bulk di dati nativi

Per esportare i dati dalla tabella nel file di dati, utilizzare il comando bcp con l'opzione out e i qualificatori seguenti:

Qualificatori

Descrizione

-n

Specifica i tipi di dati nativi.

-T

Specifica che l'utilità bcp si connette a SQL Server tramite una connessione trusted utilizzando la protezione integrata. Se non si specifica -T, è necessario specificare le opzioni -U e -P per eseguire correttamente l'accesso.

Nell'esempio seguente viene eseguita l'esportazione bulk dei dati in formato nativo dalla tabella myTestNativeData in un nuovo file di dati denominato myTestNativeData-n.Dat. Al prompt dei comandi di Microsoft Windows digitare:

bcp AdventureWorks..myTestNativeData out C:\myTestNativeData-n.Dat -n -T

Utilizzo dell'istruzione BULK INSERT per l'importazione bulk di dati nativi

Nell'esempio seguente viene utilizzata l'istruzione BULK INSERT per importare i dati del file myTestNativeData-n.Dat nella tabella myTestNativeData. Nell'editor di query di SQL Server Management Studio eseguire:

USE AdventureWorks;
GO
BULK INSERT myTestNativeData 
    FROM 'C:\myTestNativeData-n.Dat' 
   WITH (DATAFILETYPE='native'); 
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData
GO