Utilizzo del formato carattere Unicode per l'importazione o l'esportazione di dati (SQL Server)Use Unicode Character Format to Import or Export Data (SQL Server)

È consigliabile utilizzare il formato carattere Unicode per il trasferimento bulk di dati tra più istanze di SQL ServerSQL Server tramite un file di dati contenente caratteri estesi o DBCS.Unicode character format is recommended for bulk transfer of data between multiple instances of SQL ServerSQL Server by using a data file that contains extended/DBCS characters. 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.The Unicode character data format allows data to be exported from a server by using a code page that differs from the code page used by the client that is performing the operation. In questi casi, l'utilizzo del formato di dati carattere Unicode offre i vantaggi seguenti:In such cases, use of Unicode character format has the following advantages:

  • 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.If the source and destination data are Unicode data types, use of Unicode character format preserves all of the character data.

  • 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.If the source and destination data are not Unicode data types, use of Unicode character format minimizes the loss of extended characters in the source data that cannot be represented at the destination.

Contenuto dell'argomentoIn this Topic:
Considerazioni sull'uso del formato carattere UnicodeConsiderations for Using Unicode Character Format
Considerazioni speciali sull'uso del formato carattere Unicode, di bcp e di un file di formatoSpecial Considerations for Using Unicode Character Format, bcp, and a Format File
Opzioni di comando per il formato carattere UnicodeCommand Options for Unicode Character Format
Condizioni di test di esempioExample Test Conditions
 ● Tabella di esempio ● Sample Table
 ● File di formato non XML di esempio ● Sample Non-XML Format File
EsempiExamples
 ● Uso di bcp e del formato carattere Unicode per l'esportazione di dati ● Using bcp and Unicode Character Format to Export Data
 ● Uso di bcp e del formato carattere Unicode per l'importazione di dati senza un file di formato ● Using bcp and Unicode Character Format to Import Data without a Format File
 ● Uso di bcp e del formato carattere Unicode per l'importazione di dati con un file di formato non XML ● Using bcp and Unicode Character Format to Import Data with a Non-XML Format File
 ● Uso di BULK INSERT e del formato carattere Unicode senza un file di formato ● Using BULK INSERT and Unicode Character Format without a Format File
 ● Uso di BULK INSERT e del formato carattere Unicode con un file di formato non XML ● Using BULK INSERT and Unicode Character Format with a Non-XML Format File
 ● Uso di OPENROWSET e del formato carattere Unicode con un file di formato non XML ● Using OPENROWSET and Unicode Character Format with a Non-XML Format File
Attività correlateRelated Tasks

Considerazioni sull'uso del formato carattere UnicodeConsiderations for Using Unicode Character Format

Quando si usa il formato carattere Unicode, è necessario tenere presenti i fattori seguenti:When using Unicode character format, consider the following:

Considerazioni speciali sull'uso del formato carattere Unicode, di bcp e di un file di formatoSpecial Considerations for Using Unicode Character Format, bcp, and a Format File

Per i file in formato carattere Unicode vengono rispettate le convenzioni dei file Unicode.Unicode character format data files follow the conventions for Unicode files. I primi due byte del file sono rappresentati da numeri esadecimali, 0xFFFE.The first two bytes of the file are hexadecimal numbers, 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.These bytes serve as byte-order marks (BOM), specifying whether the high-order byte is stored first or last in the 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:The bcp Utility may misinterpret the BOM and cause part of your import process to fail; you may receive an error message similar as follows:

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:The BOM may be misinterpreted under the following conditions:

  • L' utilità bcp viene usata insieme all'opzione -w per indicare il carattere UnicodeThe bcp Utility is used and the -w switch is used to indicate Unicode character

  • Viene usato un file di formatoA format file is used

  • Il primo campo nel file di dati è di tipo non carattereThe first field in the data file is non-character

Provare a usare una delle soluzioni alternative seguenti, a seconda della situazione specifica :Consider whether any of the following workarounds may be available for your specific situation:

Opzioni di comando per il formato carattere UnicodeCommand Options for Unicode Character Format

È 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.You can import Unicode character format data into a table using bcp, BULK INSERT or INSERT ... SELECT * FROM OPENROWSET(BULK...). For a bcp command or BULK INSERT statement, you can specify the data format in the statement. Per un'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...) è necessario specificare il formato dati in un file di formato.For an INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, you must specify the data format in a format file.

Il formato carattere Unicode è supportato dalle opzioni di comando seguenti:Unicode character format is supported by the following command options:

ComandoCommand OpzioneOption DescrizioneDescription
bcpbcp -w-w Utilizza il formato carattere Unicode.Uses the Unicode character format.
BULK INSERTBULK INSERT DATAFILETYPE ='widechar'DATAFILETYPE ='widechar' Utilizza il formato carattere Unicode durante l'importazione bulk di dati.Uses Unicode character format when bulk importing data.
OPENROWSETOPENROWSET N/DN/A Deve usare un file di formatoMust use a format file

Nota

In alternativa, è possibile definire la formattazione di ogni singolo campo in un file di formato.Alternatively, you can specify formatting on a per-field basis in a format file. Per altre informazioni, vedere File di formato per l'importazione o l'esportazione di dati (SQL Server).For more information, see Format Files for Importing or Exporting Data (SQL Server).

Condizioni di test di esempioExample Test Conditions

Gli esempi riportati in questo argomento sono basati sulla tabella e sul file di formato definiti di seguito.The examples in this topic are based on the table, and format file defined below.

Tabella di esempioSample Table

Lo script seguente crea un database di test, una tabella denominata myWidechar e popola la tabella con alcuni valori iniziali.The script below creates a test database, a table named myWidechar and populates the table with some initial values. Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL 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 esempioSample Non-XML Format File

SQL Server supporta due tipi di file di formato, ovvero non XML e XML.SQL Server support two types of format file: non-XML format and XML format. Il formato non XML è il formato originale supportato dalle versioni precedenti di SQL Server.The non-XML format is the original format that is supported by earlier versions of SQL Server. Per informazioni dettagliate, vedere File in formato non XML (SQL Server) .Please review Non-XML Format Files (SQL Server) for detailed information. Il comando seguente userà l' utility bcp per generare un formato di file non XML, myWidechar.fmt, sulla base dello schema di myWidechar.The following command will use the bcp utility to generate a non-xml format file, myWidechar.fmt, based on the schema of 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.To use a bcp command to create a format file, specify the format argument and use nul instead of a data-file path. L'opzione format richiede anche l'opzione -f .The format option also requires the -f option. 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.In addition, for this example, the qualifier c is used to specify character data, and T is used to specify a trusted connection using integrated security. Al prompt dei comandi immettere i comandi seguenti:At a command prompt, enter the following commands:

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.Ensure your non-XML format file ends with a carriage return\line feed. In caso contrario, è possibile che venga visualizzato il messaggio di errore seguente:Otherwise you will likely receive the following error message:

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

EsempiExamples

Gli esempi seguenti usano il database e i file di formato creati in precedenza.The examples below use the database, and format files created above.

Uso di bcp e del formato carattere Unicode per l'esportazione di datiUsing bcp and Unicode Character Format to Export Data

Opzione-w e comando OUT .-w switch and OUT command. Nota: il file di dati creato in questo esempio verrà usato in tutti gli esempi successivi.Note: the data file created in this example will be used in all subsequent examples. Al prompt dei comandi immettere i comandi seguenti:At a command prompt, enter the following commands:

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 formatoUsing bcp and Unicode Character Format to Import Data without a Format File

Opzione-w e comando IN .-w switch and IN command. Al prompt dei comandi immettere i comandi seguenti:At a command prompt, enter the following commands:

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 XMLUsing bcp and Unicode Character Format to Import Data with a Non-XML Format File

Opzioni-w e -f switches e IN comme.-w and -f switches and IN command. 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.A workaround will need to be used since this example involves bcp, a format file, Unicode character, and the first data field in the data file is non-character. Vedere Considerazioni speciali sull'uso del formato carattere Unicode, di bcp e di un file di formatopiù indietro.See Special Considerations for Using Unicode Character Format, bcp, and a Format File, above. Il file di dati myWidechar.bcp verrà modificato aggiungendo un record "fittizio" che successivamente verrà ignorato con l'opzione -F 2 .The data file myWidechar.bcp will be altered by adding an additional record as a “dummy” record which will then be skipped with the -F 2 switch.

Al prompt dei comandi, immettere i comandi seguenti e seguire i passaggi di modifica:At a command prompt, enter the following commands and follow the modification steps:

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 formatoUsing BULK INSERT and Unicode Character Format without a Format File

ArgomentoDATAFILETYPE .DATAFILETYPE argument. Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL 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 XMLUsing BULK INSERT and Unicode Character Format with a Non-XML Format File

ArgomentoFORMATFILE .FORMATFILE argument. Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL 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 XMLUsing OPENROWSET and Unicode Character Format with a Non-XML Format File

ArgomentoFORMATFILE .FORMATFILE argument. Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL 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;

Attività correlateRelated Tasks

Per utilizzare formati di dati per l'importazione o l'esportazione bulkTo use data formats for bulk import or bulk export

Vedere ancheSee Also

bcp Utility bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Tipi di dati (Transact-SQL) Data Types (Transact-SQL)
Regole di confronto e supporto UnicodeCollation and Unicode Support