Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
El formato de caracteres Unicode se recomienda para las transferencias masivas de datos entre varias instancias de SQL Server mediante un archivo de datos que contenga caracteres DBCS o extendidos. El formato de datos de caracteres Unicode permite exportar datos desde un servidor mediante una página de códigos que difiere de la página de códigos utilizada por el cliente que realiza la operación. En esos casos, el uso del formato de caracteres Unicode tiene las siguientes ventajas:
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.
Si los datos de origen y destino no son tipos de datos Unicode, el uso del formato de caracteres Unicode minimiza la pérdida de caracteres extendidos en los datos de origen que no se pueden representar en el destino.
Consideraciones para usar el formato de caracteres Unicode
Al usar el formato de caracteres Unicode, tenga en cuenta lo siguiente:
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. Para obtener información sobre cómo especificar terminadores alternativos, vea Especificar terminadores de campo y fila (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 . Para obtener más información sobre el formato de caracteres, vea Compatibilidad con intercalación y Unicode.
Consideraciones especiales para usar el formato de caracteres Unicode, bcp y un archivo de formato
Los archivos de datos con formato de caracteres Unicode utilizan las convenciones de los archivos Unicode. Los primeros dos bytes del archivo son los números hexadecimales 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. La utilidad bcp podría malinterpretar la lista de materiales y provocar un error en parte del proceso de importación; Es posible que reciba un mensaje de error similar al siguiente:
Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification
La lista de materiales podría ser malinterpretada en las siguientes condiciones:
Se utiliza la utilidad bcp y se utiliza el
-w
conmutador para indicar los caracteres Unicode.Se usa un archivo de formato.
El primer campo del archivo de datos es un campo sin caracteres.
Tenga en cuenta si alguna de las siguientes soluciones alternativas podría estar disponible para su situación específica :
No use ningún archivo de formato. Se proporciona un ejemplo de esta solución alternativa en el Uso de bcp y el formato de carácter Unicode para importar datos sin un archivo de formato.
Utiliza el
-c
interruptor en lugar de-w
.Vuelva a exportar los datos con un formato nativo.
Utilice BULK INSERT (Transact-SQL) o OPENROWSET (Transact-SQL). Algunos ejemplos de estas soluciones alternativas se proporcionan en las secciones Usar BULK INSERT y el formato de caracteres Unicode con un archivo de formato no XML y Usar OPENROWSET y el formato de caracteres Unicode con un archivo de formato no XML.
Inserte manualmente el primer registro en la tabla de destino y, a continuación, use
-F 2
el modificador para que la importación se inicie en el segundo registro,Inserte manualmente el primer registro ficticio en el archivo de datos y luego use el conmutador
-F 2
para que la importación comience en el segundo registro. Se proporciona un ejemplo de esta solución alternativa en la sección Using bcp and Unicode character format to Import Data with a non-XML format file (Usar bcp y unicode para importar datos con un archivo de formato no XML ),Use una tabla de almacenamiento provisional en la que la primera columna sea un tipo de datos de caracteres; o
Vuelva a exportar los datos y cambie el orden del campo de datos para que el primer campo de datos sea carácter. Luego, use un archivo de formato para volver a asignar el campo de datos en el orden real de la tabla. Para obtener un ejemplo, vea Usar un archivo de formato para asignar columnas de tabla a campos de archivo de datos (SQL Server).
Opciones de comandos para el formato de caracteres Unicode
Puede importar datos de formato de caracteres Unicode en una tabla mediante bcp, BULK INSERT o OPENROWSET. Para un comando bcp o una instrucción BULK INSERT , puede especificar el formato de datos en la instrucción . Para una instrucción OPENROWSET , debe especificar el formato de datos en un archivo de formato.
El formato de caracteres Unicode se puede usar con las siguientes opciones de comando:
Comando | Opción | Descripción |
---|---|---|
bcp |
-w |
Usa el formato de caracteres Unicode. |
BULK INSERT |
DATAFILETYPE ='widechar' |
Utiliza el formato de caracteres Unicode al importar datos masivamente. |
OPENROWSET |
N/D | Debe usar un archivo de formato |
Nota:
Otra posibilidad es especificar el formato por campo en un archivo de formato. Para obtener más información, consulte Formato de archivos para importar o exportar datos (SQL Server).
Condiciones de prueba de ejemplo
Los ejemplos de este artículo se basan en la tabla y el archivo de formato siguientes.
Tabla de ejemplo
El script siguiente crea una base de datos de prueba, una tabla denominada myWidechar
y rellena la tabla con algunos valores iniciales. Ejecute el siguiente Transact-SQL en 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;
Archivo de formato no XML de ejemplo
SQL Server admite dos tipos de archivos de formato: XML y no XML. El formato no XML es el formato original compatible con versiones anteriores de SQL Server. Para obtener más información, vea Usar archivos de formato no XML (SQL Server).
El siguiente comando usa la utilidad bcp para generar un archivo de formato no XML, , myWidechar.fmt
basado en el esquema de myWidechar
. Para usar un comando bcp para crear un archivo de formato, especifique el argumento format
y use nul
en lugar de una ruta de acceso de archivo de datos. La opción Format también requiere la opción -f
. Además, en este ejemplo, el calificador c
se usa para especificar datos de caracteres y se usa T
para especificar una conexión de confianza mediante la seguridad integrada. En un símbolo del sistema, escriba los comandos siguientes:
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. De lo contrario, puede recibir el siguiente mensaje de error:
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file
Ejemplos
En los ejemplos siguientes se usan la base de datos y los archivos de formato creados anteriormente.
Usar el formato de caracteres bcp y Unicode para exportar datos
-w
interruptor y OUT
comando. El archivo de datos creado en este ejemplo se usa en todos los ejemplos posteriores. En un símbolo del sistema, escriba los comandos siguientes:
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
REM Review results
NOTEPAD D:\BCP\myWidechar.bcp
Usar el formato de caracteres bcp y Unicode para importar datos sin un archivo de formato
-w
interruptor y IN
comando. En un símbolo del sistema, escriba los comandos siguientes:
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 el formato de caracteres bcp y Unicode para importar datos con un archivo de formato no XML
-w
y -f
interruptores y el comando IN
. Es necesario usar una solución alternativa, ya que este ejemplo implica bcp, un archivo de formato, un carácter Unicode y el primer campo de datos del archivo de datos no es de carácter. Consulte Consideraciones especiales para usar el formato de caracteres Unicode, bcp y un archivo de formato anterior en el artículo. El archivo de datos myWidechar.bcp
se modifica al añadir un registro adicional, que actúa como un "registro de prueba" y que se omite posteriormente con el modificador -F 2
.
En un símbolo del sistema, escriba los siguientes comandos y siga los pasos de modificación:
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 formato de caracteres Unicode sin un archivo de formato
DATAFILETYPE
argumento. Ejecute el siguiente Transact-SQL en 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;
Usar el BULK INSERT y el formato de caracteres Unicode con un archivo de formato no XML
FORMATFILE
argumento. Ejecute el siguiente Transact-SQL en 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 del formato de caracteres OPENROWSET y Unicode con un archivo de formato no XML
FORMATFILE
argumento. Ejecute el siguiente Transact-SQL en 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;
Tareas relacionadas
Para usar formatos de datos para la importación o exportación masivas
- Importación de datos de formato nativo y de caracteres de versiones anteriores de SQL Server
- Uso del formato de caracteres para importar o exportar datos (SQL Server)
- Uso del formato nativo para importar o exportar datos (SQL Server)
- Usar el formato nativo Unicode para importar o exportar datos (SQL Server)