Share via


Utilizzo del formato nativo per importare o esportare dati (SQL Server)

L'uso del formato nativo è consigliabile per il trasferimento bulk dei dati tra più istanze di SQL Server tramite un file di dati che non contiene caratteri estesi o DBCS (Double Byte Character Set).

Nota

Per il trasferimento bulk di dati tra più istanze di SQL Server mediante un file di dati contenente caratteri estesi o DBCS, è consigliabile usare il formato nativo Unicode. Per altre informazioni, vedere Usare il formato Unicode nativo per importare o esportare dati (SQL Server).

Il formato nativo mantiene i tipi di dati nativi di un database e viene usato 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 altre informazioni sull'uso dei file di formato, vedere File di formato per l'importazione o l'esportazione di dati (SQL Server).

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 usa il formato 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 char campo o varcharbcp aggiunge la lunghezza del prefisso.

    Importante

    Quando viene usata la modalità nativa, per impostazione predefinita, l'utilità bcp converte i caratteri da SQL Server a caratteri OEM prima di copiarli in un file di dati. L'utilità bcp converte i caratteri da un file di dati a caratteri ANSI prima di importarli in blocco 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.

  • 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 altre informazioni sulla conversione dei dati, vedere Conversione del tipo di dati (motore di database).

Opzioni di comando per il formato nativo

È possibile importare dati in formato nativo in una tabella usando bcp, BULK INSERT o 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 dati in un file di formato.

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

Comando Opzione Descrizione
bcp -n Fa sì che l'utilità bcp usi i tipi di dati nativi dei dati. 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, usare l'opzione -V. Per altre informazioni, vedere Importare dati in formato nativo e carattere da versioni precedenti di SQL Server.

Per altre 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 altre informazioni, vedere File di formato per l'importazione o l'esportazione di dati (SQL Server).

Esempio

Gli esempi seguenti mostrano come eseguire l'esportazione in blocco di dati nativi usando bcp e l'importazione in blocco degli stessi dati usando 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, è necessario creare la tabella. In SQL Server Management Studio Editor di query 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 al file di dati, usare 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 con una connessione trusted che usa la sicurezza integrata. Se non si specifica -T , è necessario specificare -U e -P per eseguire correttamente l'accesso.

Nel seguente esempio 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 immettere:

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 si utilizza BULK INSERT per importare i dati dal file di dati myTestNativeData-n.Dat nella tabella myTestNativeData. In SQL Server Management Studio Editor di query eseguire:

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

Attività correlate

Per utilizzare formati di dati per l'importazione o l'esportazione bulk

Vedere anche

Utilità bcp
BULK INSERT (Transact-SQL)
Tipi di dati (Transact-SQL)
sql_variant (Transact-SQL)
Importare dati in formato nativo e carattere da versioni precedenti di SQL Server
OPENROWSET (Transact-SQL)
Utilizzare il formato Unicode nativo per importare o esportare dati (SQL Server)