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

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

È consigliabile utilizzare il formato carattere Unicode per il trasferimento bulk di dati tra più istanze di SQL Server tramite un file di dati contenente caratteri estesi o DBCS. Questo formato di dati consente di trasferire i dati da un server utilizzando una tabella codici diversa da quella del client che esegue l'operazione. In questi casi, l'utilizzo del formato di dati carattere Unicode offre i vantaggi seguenti:

  • Se i dati di origine e di destinazione sono di tipo Unicode, il formato carattere Unicode consente di mantenere tutti i dati di tipo carattere.

  • Se i dati di origine e di destinazione non sono di tipo Unicode, il formato carattere Unicode consente di ridurre al minimo la perdita dei caratteri estesi nei dati di origine che non possono essere rappresentati nella destinazione.

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

Considerazioni sull'uso del formato carattere Unicode

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

Considerazioni speciali sull'uso del formato carattere Unicode, di bcp e di un file di formato

Per i file in formato carattere Unicode vengono rispettate le convenzioni dei file Unicode. I primi due byte del file sono rappresentati da numeri esadecimali, 0xFFFE. Tali byte hanno la funzione di indicatori per l'ordine dei byte (BOM) e specificano se archiviare il byte più significativo come primo o ultimo byte del file. L' utilità bcp può interpretare il BOM in modo errato causando la non riuscita di parte del processo di importazione. È possibile che venga visualizzato un messaggio di errore simile a quello indicato di seguito:

Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification

Il BOM potrebbe essere interpretato in modo errato nelle condizioni seguenti:

  • L' utilità bcp viene usata insieme all'opzione -w per indicare il carattere Unicode

  • Viene usato un file di formato

  • Il primo campo nel file di dati è di tipo non carattere

Provare a usare una delle soluzioni alternative seguenti, a seconda della situazione specifica :

Opzioni di comando per il formato carattere Unicode

È possibile importare dati in formato carattere Unicode 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 Unicode è supportato dalle opzioni di comando seguenti:

Comando Opzione Descrizione
bcp -w Utilizza il formato carattere Unicode.
BULK INSERT DATAFILETYPE ='widechar' Utilizza il formato carattere Unicode durante l'importazione bulk di dati.
OPENROWSET N/D Deve usare un file di formato

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 myWidechar 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.myWidechar ( 
    PersonID smallint NOT NULL,
    FirstName nvarchar(25) NOT NULL,
    LastName nvarchar(30) NOT NULL,
    BirthDate date,
    AnnualSalary money
);

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

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

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, myWidechar.fmt, sulla base dello schema di myWidechar. 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 i comandi seguenti:

bcp TestDatabase.dbo.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w

REM Review file
Notepad D:\BCP\myWidechar.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 Unicode per l'esportazione di dati

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

bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w

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

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

Opzione -w e comando IN . Al prompt dei comandi immettere i comandi seguenti:

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

REM Import data
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -T -w

REM Review results is SSMS

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

Opzioni -w e -f switches e IN comme. Sarà necessario adottare una soluzione alternativa poiché in questo esempio vengono usati bcp, un file di formato, un carattere Unicode e il primo campo dati del file di dati è di tipo non carattere. Vedere Considerazioni speciali sull'uso del formato carattere Unicode, di bcp e di un file di formatopiù indietro. Il file di dati myWidechar.bcp verrà modificato aggiungendo un record "fittizio" che successivamente verrà ignorato con l'opzione -F 2.

Al prompt dei comandi, immettere i comandi seguenti e seguire i passaggi di modifica:

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

REM Open data file
Notepad D:\BCP\myWidechar.bcp
REM Copy first record and then paste as new first record.  This additional record is the "dummy" record.
REM Close file.

REM Import data instructing bcp to skip dummy record with the -F 2 switch.
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -f D:\BCP\myWidechar.fmt -T -F 2

REM Review results is SSMS

REM Return data file to original state for usage in other examples
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w

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

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

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

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

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

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

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

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

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

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

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

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

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

Vedere anche

Utilità bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipi di dati (Transact-SQL)
Regole di confronto e supporto Unicode