Uso del formato nativo para importar o exportar datos (SQL Server)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Se recomienda usar el formato nativo cuando se realiza una transferencia de datos en bloque entre varias instancias de SQL Server mediante un archivo de datos que no contiene juegos de caracteres extendidos o de doble byte (DBCS).
Nota:
Para realizar una transferencia masiva de datos entre varias instancias de SQL Server utilizando un archivo de datos que contenga caracteres extendidos o DBCS, debe utilizar el formato nativo Unicode. Para obtener más información, vea Usar el formato nativo Unicode para importar o exportar datos (SQL Server).
El formato nativo mantiene los tipos de datos nativos de una base de datos. Está pensado para transferencias de datos de alta velocidad entre tablas de SQL Server. Si utiliza un archivo de formato, las tablas de origen y destino no tienen que ser idénticas. La transferencia de datos implica dos pasos:
Exportación masiva de datos de una tabla de origen a un archivo de datos
Importación masiva de datos de un archivo de datos a una tabla de destino
El uso del formato nativo entre tablas idénticas evita la conversión innecesaria de tipos de datos a y desde el formato de caracteres, lo que ahorra tiempo y espacio. No obstante, para obtener la velocidad de transferencia óptima, se realizan algunas comprobaciones relativas al formato de los datos. Para evitar problemas con los datos cargados, vea la siguiente lista de restricciones.
Restricciones
Para importar datos con formato nativo correctamente, asegúrese de lo siguiente:
El archivo de datos tiene formato nativo.
O bien la tabla de destino debe ser compatible con el archivo de datos (tiene el mismo número de columnas, el mismo tipo de datos, la misma longitud, el estado NULL, etc.) o bien debe utilizar un archivo de formato para asignar cada campo a las columnas correspondientes.
Nota:
Si importa datos de un archivo que no coincide con la tabla de destino, la operación de importación puede ser correcta pero, probablemente, los valores de los datos insertados en la tabla de destino son incorrectos. Esto se debe a que los datos del archivo se interpretan utilizando el formato de la tabla de destino. Por tanto, si hay alguna incoherencia, se insertan valores incorrectos. No obstante, en ningún caso puede tal incoherencia dar lugar a incoherencias lógicas o físicas en la base de datos.
Para obtener más información sobre cómo usar archivos de formato, vea Archivos de formato para importar o exportar datos (SQL Server).
Una importación correcta no daña la tabla de destino.
Cómo trata bcp los datos con formato nativo
Esta sección aborda una serie de consideraciones especiales sobre el modo en que la utilidad bcp exporta e importa datos con formato nativo.
Datos que no son caracteres
La utilidad bcp usa el formato de datos binario interno de SQL Server para escribir datos que no son caracteres de una tabla a un archivo de datos.
-
Al principio de cada campo char o varchar , bcp agrega la longitud de prefijo.
Importante
Cuando se usa el modo nativo, de forma predeterminada, la utilidad bcp convierte los caracteres de SQL Server en caracteres OEM antes de copiarlos en un archivo de datos. La utilidad bcp convierte los caracteres de un archivo de datos en caracteres ANSI antes de importarlos masivamente a una tabla de SQL Server. Durante estas conversiones, se pueden perder datos que tengan caracteres extendidos. Para caracteres extendidos, utilice el formato nativo Unicode o especifique una página de códigos.
Datossql_variant
Si se almacenan datos sql_variant como SQLVARIANT en un archivo de datos con formato nativo, los datos mantienen todas sus características. Los metadatos que registran el tipo de datos de cada valor de datos se almacenan junto con el valor de los datos. Estos metadatos se usan para volver a crear el valor de los datos con el mismo tipo de datos en una columna sql_variant de destino.
Si el tipo de datos de la columna de destino no es sql_variant, cada valor de datos se convierte al tipo de datos de la columna de destino, con las reglas normales de conversión implícita de datos. Si se produce un error durante la conversión de los datos, se revierte el lote actual. Los valores char y varchar que se transfieren entre las columnas sql_variant pueden tener problemas de conversión de página de códigos.
Para obtener más información sobre la conversión de datos, vea Conversiones de tipos de datos (motor de base de datos).
Opciones de comando para el formato nativo
Puede importar datos con formato nativo a una tabla mediante el uso de 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 admite las siguientes opciones de comando:
Comando | Opción | Descripción |
---|---|---|
bcp | -n | Hace que la utilidad bcp use los tipos de datos nativos de los datos.* |
BULK INSERT | DATAFILETYPE ='native' | Utiliza los tipos de datos nativos o nativos anchos de los datos. Tenga en cuenta que DATAFILETYPE no es necesario si el archivo de formato especifica los tipos de datos. |
OPENROWSET | N/D | Debe usar un archivo de formato |
* Para cargar datos nativos (-n) 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 myNative
, y la rellena 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.myNative (
PersonID smallint NOT NULL,
FirstName varchar(25) NOT NULL,
LastName varchar(30) NOT NULL,
BirthDate date,
AnnualSalary money
);
-- Populate table
INSERT TestDatabase.dbo.myNative
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.myNative;
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, myNative.fmt
, basado en el esquema de myNative
. 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.myNative format nul -f D:\BCP\myNative.fmt -T
REM Review file
Notepad D:\BCP\myNative.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 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.myNative OUT D:\BCP\myNative.bcp -T -n
REM Review results
NOTEPAD D:\BCP\myNative.bcp
Usar bcp y el formato nativo 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.myNative;"
REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -T -n
REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"
Usar bcp y el formato nativo 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.myNative;"
REM Import data
bcp TestDatabase.dbo.myNative IN D:\BCP\myNative.bcp -f D:\BCP\myNative.fmt -T
REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNative;"
Usar BULK INSERT y el formato nativo sin un archivo de formato
ArgumentoDATAFILETYPE . Ejecute el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
FROM 'D:\BCP\myNative.bcp'
WITH (
DATAFILETYPE = 'native'
);
-- review results
SELECT * FROM TestDatabase.dbo.myNative;
Usar BULK INSERT y el formato nativo con un archivo de formato no XML
ArgumentoFORMATFILE . Ejecute el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
BULK INSERT TestDatabase.dbo.myNative
FROM 'D:\BCP\myNative.bcp'
WITH (
FORMATFILE = 'D:\BCP\myNative.fmt'
);
-- review results
SELECT * FROM TestDatabase.dbo.myNative;
Usar OPENROWSET y el formato nativo con un archivo de formato no XML
ArgumentoFORMATFILE . Ejecute el siguiente Transact-SQL en Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myNative; -- for testing
INSERT INTO TestDatabase.dbo.myNative
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myNative.bcp',
FORMATFILE = 'D:\BCP\myNative.fmt'
) AS t1;
-- review results
SELECT * FROM TestDatabase.dbo.myNative;
Tareas relacionadas
Para usar formatos de datos para la importación o exportación masivas
Importar datos con 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 de caracteres Unicode para importar o exportar datos (SQL Server)
Usar el formato nativo Unicode para importar o exportar datos (SQL Server)
Consulte también
bcp (utilidad)
BULK INSERT (Transact-SQL)
Tipos de datos (Transact-SQL)
sql_variant (Transact-SQL)
Importar datos con formato nativo y de caracteres de versiones anteriores de SQL Server
OPENROWSET (Transact-SQL)
Usar el formato nativo Unicode para importar o exportar datos (SQL Server)