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.
En este tema se describen los archivos de formato. Puede usar un archivo de formato para omitir la importación de una columna de tabla cuando el campo no existe en el archivo de datos. Un archivo de datos puede contener menos campos que el número de columnas de la tabla solo si las columnas omitidas admiten valores NULL o tienen un valor predeterminado.
Tabla de ejemplo y archivo de datos
Los ejemplos siguientes requieren una tabla denominada myTestSkipCol en la base de datos de ejemplo AdventureWorks2012 en el esquema dbo . Cree esta tabla de la siguiente manera:
USE AdventureWorks2012;
GO
CREATE TABLE myTestSkipCol
(
Col1 smallint,
Col2 nvarchar(50) NULL,
Col3 nvarchar(50) not NULL
);
GO
En los ejemplos siguientes se usa un archivo de datos de ejemplo, , myTestSkipCol2.datque contiene solo dos campos, aunque la tabla correspondiente contiene tres columnas:
1,DataForColumn3
1,DataForColumn3
1,DataForColumn3
Para importar datos de forma masiva desde myTestSkipCol2.dat en la myTestSkipCol tabla, el archivo de formato debe asignar el primer campo de datos a Col1, el segundo campo a Col3, omitiendo Col2.
Usar un archivo de formato no XML
Puede modificar un archivo de formato no XML para omitir una columna de tabla. Normalmente, esto implica usar la utilidad bcp para crear un archivo de formato no XML predeterminado y modificar el archivo predeterminado en un editor de texto. El archivo de formato modificado debe asignar cada campo existente a su columna de tabla correspondiente e indicar qué columnas o columnas de tabla se van a omitir. Existen dos alternativas para modificar un archivo de datos no XML predeterminado. Cualquier alternativa indica que el campo de datos no existe en el archivo de datos y que no se insertará ningún dato en la columna de tabla correspondiente.
Crear un archivo de formato no XML predeterminado
En este tema se usa el archivo de formato no XML predeterminado que se creó para la myTestSkipCol tabla de ejemplo mediante el siguiente comando bcp :
bcp AdventureWorks2012..myTestSkipCol format nul -f myTestSkipCol_Default.fmt -c -T
El comando anterior crea un archivo de formato no XML, myTestSkipCol_Default.fmt. Este archivo de formato se denomina archivo de formato predeterminado porque es el formulario generado por bcp. Normalmente, un archivo de formato predeterminado describe una correspondencia uno a uno entre los campos de archivo de datos y las columnas de tabla.
Importante
Es posible que tenga que especificar el nombre de la instancia del servidor a la que se va a conectar. Además, es posible que tenga que especificar el nombre de usuario y la contraseña. Para obtener más información, consulte bcp Utility.
En la ilustración siguiente se muestran los valores de este ejemplo de archivos de formato predeterminado. La ilustración también muestra el nombre de cada campo de archivo de formato.
Nota:
Para obtener más información sobre los campos de archivo de formato, vea Archivos de formato no XML (SQL Server).
Métodos para modificar un archivo de formato no XML
Para omitir una columna de tabla, edite el archivo de formato no XML predeterminado y modifique el archivo mediante uno de los métodos alternativos siguientes:
El método preferido implica tres pasos básicos. En primer lugar, elimine cualquier fila de archivo de formato que describa un campo que falta en el archivo de datos. A continuación, reduzca el valor "Orden de campo de archivo de host" de cada fila de archivo de formato que sigue a una fila eliminada. El objetivo es valores secuenciales del "orden de campo del archivo de host", desde 1 hasta n, que reflejen la posición real de cada campo de datos en el archivo de datos. Por último, reduzca el valor del campo "Número de columnas" para reflejar el número real de campos del archivo de datos.
El ejemplo siguiente se basa en el archivo de formato predeterminado de la
myTestSkipColtabla, que se crea en "Crear un archivo de formato no XML predeterminado", anteriormente en este tema. Este archivo de formato modificado asigna el primer campo de datos aCol1, omiteCol2y asigna el segundo campo de datos aCol3. Se ha eliminado la fila deCol2. Otras modificaciones se indican en negrita:9.0 2 1 SQLCHAR 0 7 "\t" 1 Col1 "" 2 SQLCHAR 0 100 "\r\n" 3 Col3 SQL_Latin1_General_CP1_CI_ASComo alternativa, para omitir una columna de tabla, puede modificar la definición de la fila de archivo de formato que corresponde a la columna de tabla. En esta fila de archivo de formato, los valores "longitud del prefijo", "longitud de datos del archivo host" y "orden de columna del servidor" deben establecerse en 0. Además, los campos "terminador" y "intercalación de columnas" deben establecerse en "" (NULL).
El valor de "nombre de columna de servidor" requiere una cadena no en blanco, aunque el nombre de columna real no es necesario. Los campos de formato restantes requieren sus valores predeterminados.
El ejemplo siguiente también se deriva del archivo de formato predeterminado para la
myTestSkipColtabla. Los valores que deben ser 0 o NULL se indican en negrita.9.0 3 1 SQLCHAR 0 7 "\t" 1 Col1 "" 2 SQLCHAR 00""0 Col2 "" 3 SQLCHAR 0 100 "\r\n" 3 Col3 SQL_Latin1_General_CP1_CI_AS
Ejemplos
Los ejemplos siguientes también se basan en la myTestSkipCol tabla de ejemplo y en el myTestSkipCol2.dat archivo de datos de ejemplo que se crean en "Tabla de ejemplo y archivo de datos", anteriormente en este tema.
Usar BULK INSERT
En este ejemplo se usa cualquiera de los archivos de formato no XML modificados creados en "Métodos para modificar un archivo de formato no XML", anteriormente en este tema. En este ejemplo, el archivo de formato modificado se denomina C:\myTestSkipCol2.fmt. Para usar BULK INSERT para importar de forma masiva el myTestSkipCol2.dat archivo de datos, en el Editor de consultas de SQL Server Management Studio, ejecute el código siguiente:
USE AdventureWorks2012;
GO
BULK INSERT myTestSkipCol
FROM 'C:\myTestSkipCol2.dat'
WITH (FORMATFILE = 'C:\myTestSkipCol2.fmt');
GO
SELECT * FROM myTestSkipCol;
GO
Usar un archivo de formato XML
Con un archivo de formato XML, no se puede omitir una columna cuando se importa directamente en una tabla mediante un comando bcp o una instrucción BULK INSERT. Sin embargo, puede importar en todas las columnas de una tabla, excepto en la última. Si tiene que omitir todas las columnas excepto la última, debe crear una vista de la tabla de destino que incluya únicamente las columnas presentes en el archivo de datos. A continuación, puede importar datos de forma masiva desde ese archivo a la vista.
Para usar un archivo de formato XML para omitir una columna de tabla mediante OPENROWSET(BULK...), debe proporcionar una lista explícita de columnas en la lista de selección y también en la tabla de destino, como se indica a continuación:
INSERTAR...<> column_list SELECT <column_list> FROM OPENROWSET(BULK...)
Crear un archivo de formato XML predeterminado
Los ejemplos de archivos de formato modificados se basan en la myTestSkipCol tabla de ejemplo y el archivo de datos que se crean en "Tabla de ejemplo y archivo de datos", anteriormente en este tema. El siguiente comando bcp crea un archivo de formato XML predeterminado para la myTestSkipCol tabla:
bcp AdventureWorks2012..myTestSkipCol format nul -f myTestSkipCol_Default.xml -c -x -T
El archivo de formato predeterminado no XML resultante describe una correspondencia uno a uno entre los campos de archivo de datos y las columnas de tabla, como se indica a continuación:
<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="7"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
Nota:
Para obtener información sobre la estructura de los archivos de formato XML, vea Archivos de formato XML (SQL Server).
Ejemplos
Los ejemplos de esta sección usan la myTestSkipCol tabla de ejemplo y el myTestSkipCol2.dat archivo de datos de ejemplo que se crean en "Tabla de ejemplo y archivo de datos", anteriormente en este tema. Para importar los datos de myTestSkipCol2.dat en la tabla myTestSkipCol, los ejemplos utilizan el siguiente archivo de formato XML modificado, myTestSkipCol2-x.xml. Esto se basa en el archivo de formato que se crea en "Crear un archivo de formato XML predeterminado", anteriormente en este tema.
<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="Col3" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
Uso de OPENROWSET(BULK...)
El siguiente ejemplo utiliza el OPENROWSET proveedor de conjunto de filas en masa y el archivo de myTestSkipCol2.xml formato. En el ejemplo se importa masivamente el myTestSkipCol2.dat archivo de datos en la myTestSkipCol tabla. La instrucción contiene una lista explícita de columnas en la lista de selección y también en la tabla de destino, como se requiere.
En el Editor de consultas de SQL Server Management Studio, ejecute el código siguiente:
USE AdventureWorks2012;
GO
INSERT INTO myTestSkipCol
(Col1,Col3)
SELECT Col1,Col3
FROM OPENROWSET(BULK 'C:\myTestSkipCol2.Dat',
FORMATFILE='C:\myTestSkipCol2.Xml'
) as t1 ;
GO
Uso de BULK IMPORT en una vista
En el ejemplo siguiente se crea la myTestSkipCol tabla en v_myTestSkipCol. Esta vista omite la segunda columna de tabla, Col2. A continuación, el ejemplo usa BULK INSERT para importar el myTestSkipCol2.dat archivo de datos en esta vista.
En el Editor de consultas de SQL Server Management Studio, ejecute el código siguiente:
CREATE VIEW v_myTestSkipCol AS
SELECT Col1,Col3
FROM myTestSkipCol;
GO
USE AdventureWorks2012;
GO
BULK INSERT v_myTestSkipCol
FROM 'C:\myTestSkipCol2.dat'
WITH (FORMATFILE='C:\myTestSkipCol2.xml');
GO
Véase también
bcp UtilityBULK INSERT (Transact-SQL)OPENROWSET (Transact-SQL)Usar un archivo de formato para omitir un campo de datos (SQL Server)Usar un archivo de formato para asignar columnas de tabla a Data-File campos (SQL Server)Usar un archivo de formato para importar datos de forma masiva (SQL Server)