Usare il formato carattere per importare o esportare dati (SQL Server)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di sistemi analitici (PDW)

È consigliabile adottare il formato carattere per l'esportazione bulk in file di testo utilizzati in altri programmi o per l'importazione bulk da file di testo creati in altri programmi.

Quando si utilizza il formato carattere, in tutte le colonne viene applicato il formato dati di tipo carattere. L'archiviazione in formato carattere risulta utile quando i dati vengono utilizzati in altri programmi, ad esempio in un foglio di calcolo, o quando è necessario copiare in un'istanza di SQL Server i dati di database di altri fornitori, ad esempio Oracle.

Nota

Quando si esegue il trasferimento in blocco dei dati tra le istanze di Microsoft SQL Server e il file di dati contiene dati di tipo carattere Unicode ma nessun carattere esteso o DBCS, usare il formato carattere Unicode. Per altre informazioni, vedere Usare il formato carattere Unicode per importare o esportare dati (SQL Server).

Contenuto dell'argomento
Considerazioni sull'utilizzo del formato carattere
Opzioni del comando per il formato carattere
Condizioni di test di esempio
 ● Tabella di esempio
 ● File di formato non XML di esempio
Esempi
 ● Uso di bcp e del formato carattere per l'esportazione di dati
 ● Uso di bcp e del formato carattere per l'importazione di dati senza un file di formato
 ● Uso di bcp e del formato carattere per l'importazione di dati con un file di formato non XML
 ● Uso di BULK INSERT e del formato carattere senza un file di formato
 ● Uso di BULK INSERT e del formato carattere con un file di formato non XML
 ● Uso di OPENROWSET e del formato carattere con un file di formato non XML
Attività correlate

Considerazioni sull'utilizzo del formato carattere

Quando si utilizza il formato carattere, è necessario tenere presenti i fattori seguenti:

  • Per impostazione predefinita, quando si esegue l' utilità bcp i campi dei dati di tipo carattere vengono separati da un carattere di tabulazione e alla fine dei record viene inserito un carattere di nuova riga. Per informazioni su come specificare caratteri di terminazione alternativi, vedere Impostazione dei caratteri di terminazione del campo e della riga (SQL Server).

  • Per impostazione predefinita, prima dell'esportazione o dell'importazione bulk di dati in modalità carattere, vengono eseguite le conversioni seguenti:

    Direzione dell'operazione bulk Conversione
    Esportazione I dati vengono convertiti in rappresentazione dei caratteri. Se richiesto in modo esplicito, la conversione viene eseguita in base alla tabella codici specificata per le colonne di tipo carattere. Se non è stata specificata alcuna tabella codici, i dati di tipo carattere vengono convertiti in base alla tabella codici OEM del computer client.
    Import I dati di tipo carattere vengono convertiti in rappresentazione nativa, se necessario, e tradotti dalla tabella codici del client alla tabella codici delle colonne di destinazione.
  • Per impedire eventuali perdite di caratteri estesi durante la conversione, utilizzare il formato di carattere Unicode o specificare una tabella codici.

  • I dati sql_variant archiviati in un file di formato carattere risultano privi di metadati. Ogni valore viene convertito nel formato char in base alle regole di conversione dei dati implicita. I dati importati in colonne sql_variant risultano di tipo char. I dati importati in colonne con tipo di dati diverso da sql_variantvengono convertiti dal tipo di dati char tramite una conversione implicita. Per altre informazioni sulla conversione dei dati, vedere Conversione del tipo di dati (Motore di database).

  • L utilità bcp esporta i valori money in file di dati in formato carattere con quattro cifre dopo il separatore dei decimali e senza simboli di raggruppamento delle cifre, quali i separatori delle migliaia. Ad esempio, una colonna money contenente il valore 1,234,567.123456 viene copiata in un file di dati come stringa di caratteri 1234567.1235 tramite l'esportazione bulk.

Opzioni del comando per il formato carattere

È possibile importare dati in formato carattere 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 dati nell'istruzione. Per un'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...) è necessario specificare il formato dati in un file di formato.

Il formato carattere è supportato dalle opzioni di comando seguenti:

Comando Opzione Descrizione
bcp -c Determina l'uso dei dati di tipo carattere da parte dell'utilità bcp.\*
BULK INSERT DATAFILETYPE ='char' Durante l'importazione bulk dei dati viene applicato il formato carattere.
OPENROWSET N/D Deve usare un file di formato

*Per caricare dati di tipo carattere (-c) in un formato compatibile con le versioni precedenti dei client SQL Server, usare l'opzione -V. Per altre informazioni, vedere Importare dati in formato nativo e carattere da versioni precedenti di SQL Server.

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).

Condizioni di test di esempio

Gli esempi riportati in questo argomento sono basati sulla tabella e sul file di formato definiti di seguito.

Tabella di esempio

Lo script seguente crea un database di test, una tabella denominata myChar e popola la tabella con alcuni valori iniziali. Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management Studio (SSMS):

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myChar ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myChar
VALUES 
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myChar;

File di formato non XML di esempio

SQL Server supporta due tipi di file di formato, ovvero non XML e XML. Il formato non XML è il formato originale supportato dalle versioni precedenti di SQL Server. Per informazioni dettagliate, vedere File in formato non XML (SQL Server) . Il comando seguente userà l' utility bcp per generare un formato di file non XML, myChar.fmt, sulla base dello schema di myChar. Per usare un comando bcp per creare un file di formato, specificare l'argomento format e usare nul anziché un percorso del file di dati. L'opzione format richiede anche l'opzione -f . Inoltre, in questo esempio il qualificatore c viene usato per specificare dati di tipo carattere e T viene usato per specificare una connessione trusted che usa la sicurezza integrata. Al prompt dei comandi immettere il comando seguente:

bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c 

REM Review file
Notepad D:\BCP\myChar.fmt

Importante

Verificare che il file di formato non XML termini con un ritorno a capo/avanzamento riga. In caso contrario, è possibile che venga visualizzato il messaggio di errore seguente:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Esempi

Gli esempi seguenti usano il database e i file di formato creati in precedenza.

Uso di bcp e del formato carattere per l'esportazione di dati

Opzione-c e comando OUT . Nota: il file di dati creato in questo esempio verrà usato in tutti gli esempi successivi. Al prompt dei comandi immettere il comando seguente:

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

REM Review results
NOTEPAD D:\BCP\myChar.bcp

Uso di bcp e del formato carattere per l'importazione di dati senza un file di formato

Opzione-c e comando IN . Al prompt dei comandi immettere il comando seguente:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Uso di bcp e del formato carattere per l'importazione di dati con un file di formato non XML

Opzioni-c e -f switches e IN comme. Al prompt dei comandi immettere il comando seguente:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -f D:\BCP\myChar.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Uso di BULK INSERT e del formato carattere senza un file di formato

ArgomentoDATAFILETYPE . Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
	FROM 'D:\BCP\myChar.bcp'
	WITH (
		DATAFILETYPE = 'Char'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Uso di BULK INSERT e del formato carattere con un file di formato non XML

ArgomentoFORMATFILE . Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
   FROM 'D:\BCP\myChar.bcp'
   WITH (
		FORMATFILE = 'D:\BCP\myChar.fmt'
		);

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Uso di OPENROWSET e del formato carattere con un file di formato non XML

ArgomentoFORMATFILE . Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar;  -- for testing
INSERT INTO TestDatabase.dbo.myChar
	SELECT *
	FROM OPENROWSET (
		BULK 'D:\BCP\myChar.bcp', 
		FORMATFILE = 'D:\BCP\myChar.fmt'  
		) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

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

Vedi anche

Utilità bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipi di dati (Transact-SQL)
Importare dati in formato nativo e carattere da versioni precedenti di SQL Server