Usar el formato de caracteres Unicode para importar o exportar datos (SQL Server)Use Unicode Character Format to Import or Export Data (SQL Server)

En este tema se aplica a: SíSQL ServerSíbase de datos de SQL AzureSíalmacenamiento de datos de SQL Azure Sí Almacenamiento de datos paralelosTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse El formato de caracteres Unicode se recomienda para las transferencias masivas de datos entre varias instancias de SQL ServerSQL Server mediante un archivo de datos que contenga caracteres DBCS o extendidos. 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. El formato de datos de caracteres Unicode permite exportar datos desde un servidor mediante una página de códigos utilizada por el cliente que está realizando la operación.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. En esos casos, el uso del formato de caracteres Unicode tiene las siguientes ventajas:In such cases, use of Unicode character format has the following advantages:

  • Si los datos de origen y destino son de tipo Unicode, el uso del formato de caracteres Unicode mantiene todos los datos de los caracteres.If the source and destination data are Unicode data types, use of Unicode character format preserves all of the character data.

  • Si los datos de origen y de destino no son de tipo Unicode, el uso del formato de caracteres Unicode minimiza la pérdida de caracteres extendidos en los datos de origen que no pueden representarse en el destino.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.

En este tema:In this Topic:
Consideraciones sobre el uso del formato de caracteres UnicodeConsiderations for Using Unicode Character Format
Consideraciones especiales sobre el uso del formato de caracteres Unicode, bcp y un archivo de formatoSpecial Considerations for Using Unicode Character Format, bcp, and a Format File
Opciones de comando para el formato de caracteres UnicodeCommand Options for Unicode Character Format
Condiciones de prueba de ejemploExample Test Conditions
 ● Tabla de ejemplo ● Sample Table
 ● Archivo de formato no XML de ejemplo ● Sample Non-XML Format File
EjemplosExamples
 ● Usar bcp y el formato de caracteres Unicode para exportar datos ● Using bcp and Unicode Character Format to Export Data
 ● Usar bcp y el formato de caracteres Unicode para importar datos sin un archivo de formato ● Using bcp and Unicode Character Format to Import Data without a Format File
 ● Usar bcp y el formato de caracteres Unicode para importar datos con un archivo de formato no XML ● Using bcp and Unicode Character Format to Import Data with a Non-XML Format File
 ● Usar BULK INSERT y el formato de caracteres Unicode sin un archivo de formato ● Using BULK INSERT and Unicode Character Format without a Format File
 ● Usar BULK INSERT y el formato de caracteres Unicode con un archivo de formato no XML ● Using BULK INSERT and Unicode Character Format with a Non-XML Format File
 ● Usar OPENROWSET y el formato de caracteres Unicode con un archivo de formato no XML ● Using OPENROWSET and Unicode Character Format with a Non-XML Format File
Tareas relacionadasRelated Tasks

Consideraciones sobre el uso del formato de caracteres UnicodeConsiderations for Using Unicode Character Format

A la hora de usar el formato de caracteres Unicode, tenga en cuenta que:When using Unicode character format, consider the following:

  • De forma predeterminada, la utilidad bcp separa los campos de datos de caracteres con el carácter de tabulación y finaliza los registros con el carácter de nueva línea.By default, the bcp utility separates the character-data fields with the tab character and terminates the records with the newline character. Para obtener más información sobre cómo especificar otros terminadores, vea Especificar terminadores de campo y de fila (SQL Server).For information about how to specify alternative terminators, see Specify Field and Row Terminators (SQL Server).

  • Los datos sql_variant almacenados en un archivo de datos con formato de caracteres Unicode funcionan de la misma forma que en un archivo de datos en formato de caracteres, con la excepción de que los datos se almacenan como nchar en lugar de almacenarse como char.The sql_variant data that is stored in a Unicode character-format data file operates in the same way it operates in a character-format data file, except that the data is stored as nchar instead of char data. Para obtener más información sobre el formato de caracteres, consulte Compatibilidad con la intercalación y Unicode.For more information about character format, see Collation and Unicode Support.

Consideraciones especiales sobre el uso del formato de caracteres Unicode, bcp y un archivo de formatoSpecial Considerations for Using Unicode Character Format, bcp, and a Format File

Los archivos de datos con formato de caracteres Unicode utilizan las convenciones de los archivos Unicode.Unicode character format data files follow the conventions for Unicode files. Los primeros dos bytes del archivo son los números hexadecimales 0xFFFE.The first two bytes of the file are hexadecimal numbers, 0xFFFE. Estos bytes funcionan como marcas de orden de bytes (BOM), ya que especifican si el byte de orden alto se almacena el primero o el último en el archivo.These bytes serve as byte-order marks (BOM), specifying whether the high-order byte is stored first or last in the file. La utilidad bcp podría malinterpretar la marca de orden de bytes y provocar que parte del proceso de importación dé error. Es posible que reciba un mensaje de error similar al siguiente: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

La marca de orden de bytes podría malinterpretarse en las siguientes condiciones:The BOM may be misinterpreted under the following conditions:

  • Se usa la utilidad bcp y el modificador -w para indicar el carácter Unicode.The bcp Utility is used and the -w switch is used to indicate Unicode character

  • Se usa un archivo de formato.A format file is used

  • El primer campo del archivo de datos es un campo sin caracteres.The first field in the data file is non-character

Averigüe si alguna de las siguientes soluciones alternativas está disponible para su situación concreta :Consider whether any of the following workarounds may be available for your specific situation:

Opciones de comando para el formato de caracteres UnicodeCommand Options for Unicode Character Format

Puede importar datos del formato de caracteres Unicode en una tabla mediante bcp, BULK INSERT o INSERT... SELECT * FROM OPENROWSET(BULK...). Para un comando bcp o una instrucción BULK INSERT, puede especificar el formato de datos en la instrucción.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. Para una instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...), debe especificar el formato de datos en un archivo de formato.For an INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, you must specify the data format in a format file.

El formato de caracteres Unicode se puede usar con las siguientes opciones de comando:Unicode character format is supported by the following command options:

CommandCommand OpciónOption DescripciónDescription
bcpbcp -w-w Usa el formato de caracteres Unicode.Uses the Unicode character format.
BULK INSERTBULK INSERT DATAFILETYPE ='widechar'DATAFILETYPE ='widechar' Utiliza el formato de caracteres Unicode al importar datos masivamente.Uses Unicode character format when bulk importing data.
OPENROWSETOPENROWSET N/DN/A Debe usar un archivo de formatoMust use a format file

Nota

Otra posibilidad es especificar el formato por campo en un archivo de formato.Alternatively, you can specify formatting on a per-field basis in a format file. Para obtener más información, vea Archivos de formato para importar o exportar datos (SQL Server).For more information, see Format Files for Importing or Exporting Data (SQL Server).

Condiciones de prueba de ejemploExample Test Conditions

Los ejemplos de este tema se basan en la tabla y en el archivo de formato definidos a continuación.The examples in this topic are based on the table, and format file defined below.

Tabla de ejemploSample Table

El siguiente script crea una base de datos de prueba, una tabla denominada myWidechar , y la rellena con algunos valores iniciales.The script below creates a test database, a table named myWidechar and populates the table with some initial values. Ejecutar el siguiente Transact-SQL en 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;

Archivo de formato no XML de ejemploSample Non-XML Format File

SQL Server admite dos tipos de archivos de formato: XML y no XML.SQL Server support two types of format file: non-XML format and XML format. El formato no XML es el formato original compatible con versiones anteriores de SQL Server.The non-XML format is the original format that is supported by earlier versions of SQL Server. Revise Archivos de formato no XML (SQL Server) para obtener información detallada.Please review Non-XML Format Files (SQL Server) for detailed information. El siguiente comando hará uso de la utilidad BCP para generar un archivo de formato no XML, myWidechar.fmt, basado en el esquema de myWidechar.The following command will use the bcp utility to generate a non-xml format file, myWidechar.fmt, based on the schema of myWidechar. Si quiere usar un comando BCP para crear un archivo de formato, especifique el argumento format y use null en lugar de una ruta de acceso de archivo de datos.To use a bcp command to create a format file, specify the format argument and use nul instead of a data-file path. La opción format también requiere la opción -f .The format option also requires the -f option. Además, en este ejemplo, el calificador c se usa para especificar los datos de caracteres, mientras que T se usa para especificar una conexión de confianza que usa la seguridad integrada.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. En un símbolo del sistema, escriba los comandos siguientes: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

Asegúrese de que el archivo de formato no XML termina con un retorno de carro o avance de línea.Ensure your non-XML format file ends with a carriage return\line feed. De lo contrario, es probable que reciba el mensaje de error siguiente: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

EjemplosExamples

En los siguientes ejemplos se usan la base de datos y los archivos de formato creados anteriormente.The examples below use the database, and format files created above.

Usar bcp y el formato de caracteres para exportar datosUsing bcp and Unicode Character Format to Export Data

Modificador-w y comando OUT .-w switch and OUT command. Nota: el archivo de datos creado en este ejemplo se usará en todos los ejemplos siguientes.Note: the data file created in this example will be used in all subsequent examples. En un símbolo del sistema, escriba los comandos siguientes: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

Usar bcp y el formato de caracteres Unicode para importar datos sin un archivo de formatoUsing bcp and Unicode Character Format to Import Data without a Format File

Modificador-w y comando IN .-w switch and IN command. En un símbolo del sistema, escriba los comandos siguientes: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

Usar bcp y el formato de caracteres Unicode para importar datos con un archivo de formato no XMLUsing bcp and Unicode Character Format to Import Data with a Non-XML Format File

Modificadores-w y -f switches y IN commy.-w and -f switches and IN command. Se deberá aplicar una solución alternativa, puesto que este ejemplo implica bcp, un archivo de formato, un carácter Unicode y el primer campo de datos del archivo de datos es un campo sin caracteres.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. Consulte la sección Consideraciones especiales sobre el uso del formato de caracteres Unicode, bcp y un archivo de formato, que aparece más arriba.See Special Considerations for Using Unicode Character Format, bcp, and a Format File, above. El archivo de datos myWidechar.bcp se alterará mediante la adición de un registro adicional como registro "ficticio", que se omitirá con el modificador -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.

En un símbolo del sistema, escriba los siguientes comandos y siga los pasos de modificación: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

Usar BULK INSERT y el formato de caracteres Unicode sin un archivo de formatoUsing BULK INSERT and Unicode Character Format without a Format File

ArgumentoDATAFILETYPE .DATAFILETYPE argument. Ejecutar el siguiente Transact-SQL en 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;

Usar BULK INSERT y el formato de caracteres Unicode con un archivo de formato no XMLUsing BULK INSERT and Unicode Character Format with a Non-XML Format File

ArgumentoFORMATFILE .FORMATFILE argument. Ejecutar el siguiente Transact-SQL en 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;

Usar OPENROWSET y el formato de caracteres Unicode con un archivo de formato no XMLUsing OPENROWSET and Unicode Character Format with a Non-XML Format File

ArgumentoFORMATFILE .FORMATFILE argument. Ejecutar el siguiente Transact-SQL en 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;

Tareas relacionadasRelated Tasks

Para usar formatos de datos para la importación o exportación masivasTo use data formats for bulk import or bulk export

Vea tambiénSee Also

bcp Utility bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Tipos de datos (Transact-SQL) Data Types (Transact-SQL)
Compatibilidad con la intercalación y UnicodeCollation and Unicode Support