Usar el formato nativo Unicode para importar o exportar datos (SQL Server)

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database SíInstancia administrada de Azure SQL síAzure Synapse Analytics síAlmacenamiento de datos paralelos

El formato nativo Unicode es útil cuando se debe copiar información de una instalación de Microsoft SQL Server en otra. El uso del formato nativo para datos que no son caracteres permite ahorrar tiempo, además de evitar la conversión innecesaria de tipos de datos a y desde el formato de caracteres. El uso del formato de caracteres Unicode para todos los datos de caracteres evita la pérdida de caracteres extendidos durante la transferencia masiva de datos entre servidores que utilizan páginas de códigos diferentes. Los archivos de datos en formato nativo Unicode se pueden leer en cualquier método de importación masiva.

El formato nativo Unicode se recomienda para la transferencia masiva de datos entre varias instancias de SQL Server mediante un archivo de datos que contenga caracteres extendidos o DBCS. Para los datos que no son caracteres, el formato nativo Unicode utiliza tipos de datos nativos (de base de datos). En el caso de los datos de caracteres, como char, nchar, varchar, nvarchar, text, varchar (max), nvarchar (max)y ntext, el formato nativo Unicode emplea el formato de datos de caracteres Unicode.

Los datos sql_variant que se almacenan como SQLVARIANT en un archivo de datos en formato nativo Unicode funcionan de la misma manera que en un archivo de datos en formato nativo, con la excepción de que los valores char y varchar se convierten en nchar y nvarchar, lo que duplica la cantidad de espacio necesario para las columnas afectadas. Los metadatos originales se conservan y los valores se convierten de nuevo al tipo de datos char y varchar original cuando se importan masivamente en la columna de una tabla.

En este tema:
Opciones de comandos para el formato nativo Unicode
Condiciones de prueba de ejemplo
 ● Tabla de ejemplo
 ● Archivo de formato no XML de ejemplo
Ejemplos
 ● Usar bcp y el formato nativo Unicode para exportar datos
 ● Usar bcp y el formato nativo Unicode para importar datos sin un archivo de formato
 ● Usar bcp y el formato nativo Unicode para importar datos con un archivo de formato no XML
 ● Usar BULK INSERT y el formato nativo Unicode sin un archivo de formato
 ● Usar BULK INSERT y el formato nativo Unicode con un archivo de formato no XML
 ● Usar OPENROWSET y el formato nativo Unicode con un archivo de formato no XML
Tareas relacionadas

Opciones de comandos para el formato nativo Unicode

Puede importar datos en formato nativo Unicode en una tabla con 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. Para una instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...), debe especificar el formato de datos en un archivo de formato.

El formato nativo Unicode admite las siguientes opciones de comando:

Get-Help Opción Descripción
BCP -N Hace que la utilidad bcp use el formato nativo Unicode, que emplea tipos de datos nativos (de base de datos) para todos los datos que no son caracteres y el formato de datos de caracteres Unicode para todos los datos de caracteres (char, nchar, varchar, nvarchar, text y ntext).
BULK INSERT DATAFILETYPE ='widenative' Usa el formato nativo 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, vea Archivos de formato para importar o exportar datos (SQL Server).

Condiciones de prueba de ejemplo

Los ejemplos de este tema se basan en la tabla y en el archivo de formato definidos a continuación.

Tabla de ejemplo

El siguiente script crea una base de datos de prueba, una tabla denominada myWidenative , y la rellena con algunos valores iniciales. Ejecutar el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):

CREATE DATABASE TestDatabase;
GO

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

-- Populate table
INSERT TestDatabase.dbo.myWidenative
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.myWidenative;

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. Revise Archivos de formato no XML (SQL Server) para obtener información detallada. El siguiente comando hará uso de la utilidad BCP para generar un archivo de formato no XML, myWidenative.fmt, basado en el esquema de myWidenative. 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. La opción format también requiere la opción -f . 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. En un símbolo del sistema, escriba los comandos siguientes:

bcp TestDatabase.dbo.myWidenative format nul -f D:\BCP\myWidenative.fmt -T -N

REM Review file
Notepad D:\BCP\myWidenative.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, es probable que reciba el mensaje de error siguiente:

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

Ejemplos

En los siguientes ejemplos se usan la base de datos y los archivos de formato creados anteriormente.

Usar bcp y el formato nativo Unicode para exportar datos

Modificador -N y comando OUT . Nota: el archivo de datos creado en este ejemplo se usará en todos los ejemplos siguientes. En un símbolo del sistema, escriba los comandos siguientes:

bcp TestDatabase.dbo.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

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

Usar bcp y el formato nativo Unicode para importar datos sin un archivo de formato

Modificador -N y comando IN . En un símbolo del sistema, escriba los comandos siguientes:

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

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -T -N

REM Review results is SSMS

Usar bcp y el formato nativo Unicode para importar datos con un archivo de formato no XML

Modificadores -N y -f switches y IN commy. En un símbolo del sistema, escriba los comandos siguientes:

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

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

REM Review results is SSMS

Usar BULK INSERT y el formato nativo Unicode sin un archivo de formato

Argumento DATAFILETYPE . Ejecutar el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):

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

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

Usar BULK INSERT y el formato nativo Unicode con un archivo de formato no XML

Argumento FORMATFILE . Ejecutar el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):

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

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

Usar OPENROWSET y el formato nativo Unicode con un archivo de formato no XML

Argumento FORMATFILE . Ejecutar el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):

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

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

Para usar formatos de datos para la importación o exportación masivas

Consulte también

bcp (utilidad)
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipos de datos (Transact-SQL)