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

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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).

En este tema:
Consideraciones acerca del uso del formato de caracteres
Opciones de comando para el formato de caracteres
Condiciones de prueba de ejemplo
 ● Tabla de ejemplo
 ● Archivo de formato no XML de ejemplo
Ejemplos
 ● Usar el formato de caracteres para importar o exportar datos
 ● Usar bcp y el formato de caracteres para importar datos sin un archivo de formato
 ● Usar bcp y el formato de caracteres para importar datos con un archivo de formato no XML
 ● Usar BULK INSERT y el formato de caracteres sin un archivo de formato
 ● Usar BULK INSERT y el formato de caracteres con un archivo de formato no XML
 ● Usar OPENROWSET y el formato de caracteres con un archivo de formato no XML
Tareas relacionadas

Consideraciones acerca del uso del formato de caracteres

Al utilizar el formato de caracteres, tenga en cuenta que:

  • 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 representaciones nativas, 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 las 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 Conversiones 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 contenga el valor 1.234.567,123456 se exportará de forma masiva a un archivo de datos como la cadena de caracteres 1234567,1235.

Opciones de comando para el formato de caracteres

Puede importar datos en formato de caracteres en una tabla usando 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 de caracteres se puede usar con las siguientes opciones de comando:

Get-Help 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 modificador -V. Para obtener más información, vea Importar datos con 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 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 myChar , 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.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. 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, myChar.fmt, basado en el esquema de myChar. 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 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 siguientes ejemplos se usan la base de datos y los archivos de formato creados anteriormente.

Usar el formato de caracteres para importar o exportar datos

Modificador -c y comando OUT . Nota: el archivo de datos creado en este ejemplo se usará en todos los ejemplos siguientes. 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 el formato de caracteres para importar datos sin un archivo de formato

Modificador -c y 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 el formato de caracteres para importar datos con un archivo de formato no XML

Modificadores -c y -f switches y IN commy. 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

ArgumentoDATAFILETYPE . Ejecutar 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 el formato de caracteres con un archivo de formato no XML

ArgumentoFORMATFILE . Ejecutar 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

ArgumentoFORMATFILE . Ejecutar 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 o exportación masivas

Consulte también

bcp (utilidad)
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipos de datos (Transact-SQL)
Importar datos con formato nativo y de caracteres de versiones anteriores de SQL Server