Compartir a través de


Uso del formato de caracteres para importar o exportar datos (SQL Server)

se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse en Microsoft Fabric

Se recomienda utilizar el formato de caracteres al exportar datos de forma masiva a un archivo de texto que se va a utilizar en otro programa o al importar datos de forma masiva desde un archivo de texto generado por otro programa.

El formato de caracteres utiliza el formato de datos de caracteres para todas las columnas. El almacenamiento de información en el formato de caracteres resulta útil si se utilizan los datos en otro programa, como hojas de cálculo, o bien cuando es necesario copiar los datos a una instancia de SQL Server desde una base de datos de otro proveedor, como Oracle.

Nota:

Para transferir datos masivamente entre instancias de Microsoft SQL Server cuando el archivo de datos contiene caracteres Unicode pero no contiene caracteres extendidos o DBCS, utilice el formato de caracteres Unicode. Para obtener más información, vea Usar el formato de caracteres unicode para importar o exportar datos (SQL Server).

Consideraciones para usar el formato de caracteres

Al usar el formato de caracteres, 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 más información sobre cómo especificar otros terminadores, vea Especificar terminadores de campo y de fila (SQL Server).

  • De forma predeterminada, antes de la exportación o importación masiva de los datos en modo de caracteres, se realizan las conversiones siguientes:

    Dirección de la operación masiva Conversión
    Exportación Convierte los datos en representaciones de caracteres. Si se solicita de forma explícita, los datos se convierten a la página de códigos solicitada para las columnas de caracteres. Si no se especifica ninguna página de códigos, los datos de caracteres se convierten mediante la página de códigos OEM del equipo cliente.
    Importar Convierte los datos de caracteres en una representación nativa, cuando es necesario, y traduce los datos de caracteres de la página de códigos del cliente a la página de códigos de una o varias columnas de destino.
  • Para evitar la pérdida de caracteres extendidos durante la conversión, utilice el formato de caracteres Unicode o especifique una página de códigos.

  • Todos los datos sql_variant almacenados en un archivo de formato de caracteres se almacenan sin metadatos. Cada valor de dato se convierte al formato char , según las reglas de conversión implícita de datos. Cuando los datos se importan en la columna sql_variant , se importan como char. Cuando los datos se importan en una columna con un tipo de datos diferente de sql_variant, se convierten desde char mediante la conversión implícita. Para obtener más información sobre la conversión de datos, vea Conversión de tipos de datos (motor de base de datos).

  • La utilidad bcp exporta valores money como archivos de datos con formato de caracteres con cuatro cifras tras el separador decimal y sin símbolos de agrupación de cifras, tales como separadores de millares. Por ejemplo, una columna money que contiene el valor 1,234,567.123456 se exporta masivamente a un archivo de datos como la cadena de caracteres 1234567.1235.

Opciones de comandos para el formato de caracteres

Puede importar datos de formato de caracteres en una tabla mediante bcp, BULK INSERT (Transact-SQL), o OPENROWSET (Transact-SQL). Para un comando de bcp o comando BULK INSERT (Transact-SQL), puede especificar el formato de datos en la declaración. Para una instrucción OPENROWSET (Transact-SQL), debe especificar el formato de datos en un archivo de formato.

El formato de caracteres se puede usar con las siguientes opciones de comando:

Comando Opción Descripción
bcp -c Hace que la utilidad bcp use datos de caracteres.*
BULK INSERT DATAFILETYPE ='char' Utiliza el formato de caracteres al importar datos masivamente.
OPENROWSET N/D Debe usar un archivo de formato

* Para cargar datos de caracteres (-c) en un formato compatible con versiones anteriores de clientes de SQL Server, use el interruptor -V. Para obtener más información, vea Importar datos de formato nativo y de caracteres de versiones anteriores de SQL Server.

Nota:

Otra posibilidad es especificar el formato por campo en un archivo de formato. Para obtener más información, vea 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 myChar 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.myChar ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

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

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

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 archivos de formato no XML (SQL Server). El comando siguiente usa el utilidad bcp para generar un archivo de formato no xml, myChar.fmt, basado en el esquema de myChar. 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 el símbolo del sistema, escriba el siguiente comando:

bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c 

REM Review file
Notepad D:\BCP\myChar.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 ejemplos siguientes se usan la base de datos y los archivos de formato creados anteriormente en este artículo.

Usar bcp y formato de caracteres para exportar datos

-c interruptor y OUT comando.

El archivo de datos creado en este ejemplo se usará en todos los ejemplos posteriores.

En el símbolo del sistema, escriba el siguiente comando:

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

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

Usar bcp y formato de caracteres para importar datos sin un archivo de formato

El interruptor -c y el comando IN. En el símbolo del sistema, escriba el siguiente comando:

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

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Usar bcp y formato de caracteres para importar datos con un archivo de formato no XML

Los interruptores -c y -f y el comando IN. En el símbolo del sistema, escriba el siguiente comando:

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

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

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Usar BULK INSERT y el formato de caracteres sin un archivo de formato

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

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

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

Usar BULK INSERT y formato de caracteres con un archivo de formato no XML

Este es un ejemplo del argumento FORMATFILE. Ejecute el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):

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

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

Usar OPENROWSET y el formato de caracteres con un archivo de formato no XML

Ejemplo del argumento FORMATFILE. Ejecute el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):

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

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

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