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.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
En los campos de datos de caracteres, los caracteres de terminación opcionales permiten marcar el final de cada campo de un archivo de datos con un terminador de campo y el final de cada fila con un terminador de fila. Los caracteres de terminación son una forma de indicar a los programas que leen el archivo de datos dónde termina un campo o una fila y dónde comienza otro.
Importante
Cuando utilice el formato nativo o nativo Unicode, use prefijos de longitud en lugar de terminadores de campo. Los datos de formato nativo pueden entrar en conflicto con terminadores porque un archivo de datos de formato nativo se almacena en el formato de datos binario interno de Microsoft SQL Server.
Caracteres admitidos como terminadores
El comando bcp , BULK INSERT
la instrucción y el OPENROWSET
proveedor de conjuntos de filas masivas admiten varios caracteres como terminadores de campo o fila y siempre buscan la primera instancia de cada terminador. La siguiente tabla enumera los caracteres admitidos como terminadores.
Carácter de terminación | Indicado por | Descripción |
---|---|---|
Pestaña | \t |
Terminador de campo predeterminado. |
Carácter de nueva línea | \n |
Terminador de fila predeterminado. |
Retorno de carro/avance de línea | \r |
|
Barra diagonal inversa 1 | \ |
|
Terminador nulo (terminador novisible) 2 | \0 |
|
Cualquier carácter imprimible (los caracteres de control no se pueden imprimir, excepto null, tabulación, nueva línea y retorno de carro) | (* , A , t , l , etc.) |
|
Una cadena de hasta 10 caracteres imprimibles, incluidos algunos o todos los terminadores enumerados anteriormente | (**\t** , end , !!!!!!!!!! , \t-\n , etc.) |
1 Solo los t
caracteres , n
, r
, 0
y \0
funcionan con el carácter de escape de barra diagonal inversa para generar un carácter de control.
2 Aunque el carácter de control nulo (\0
) no esté visible cuando se imprime, es un carácter distinto en el archivo de datos. Esto significa que el uso del carácter de control NULL como terminador de campo o de fila es diferente a no tener ningún terminador de campo o de fila.
Importante
Si se produce un carácter de terminador dentro de los datos, el carácter se interpreta como terminador, no como datos, y los datos después de ese carácter se interpretan como pertenecientes al campo o registro siguiente. Por lo tanto, elija los terminadores con atención para asegurarse de que nunca aparezcan en los datos. Por ejemplo, un terminador de campo suplente bajo no es una buena opción para un terminador de campo si los datos contienen ese suplente bajo.
Usar terminadores de fila
El terminador de fila puede ser el mismo carácter que el terminador del último campo. Sin embargo, normalmente resulta útil un terminador de fila distinto. Por ejemplo, para generar una salida tabular, finalice el último campo de cada fila con el carácter de nueva línea (\n
) y todos los demás campos con el carácter de tabulación (\t
). Para colocar cada registro de datos en su propia línea en el archivo de datos, especifique la combinación \r\n
como terminador de fila.
Nota:
Cuando se usa bcp de forma interactiva y se especifica \n
(nueva línea) como terminador de fila, bcp lo prefija automáticamente con un \r
carácter (retorno de carro), lo que da como resultado un terminador de fila de \r\n
.
Especificación de terminadores para la exportación masiva
Cuando realiza una exportación masiva de datos char o nchar y quiere usar un terminador no predeterminado, deberá especificar el terminador en el comando bcp . Los terminadores se pueden especificar de cualquiera de las siguientes maneras:
Con un archivo de formato que especifica el terminador campo a campo.
Nota:
Para obtener información sobre cómo usar archivos de formato, vea Formato de archivos para importar o exportar datos (SQL Server).
Sin un archivo de formato, existen las alternativas siguientes:
Use el
-t
modificador para especificar el terminador de campo para todos los campos excepto el último campo de la fila y el-r
modificador para especificar un terminador de fila.Use un modificador de formato de caracteres (
-c
o-w
) sin el-t
modificador , que establece el terminador de campo en el carácter de tabulación,\t
. Esto es lo mismo que especificar-t\t
.Nota:
Si especifica el
-n
modificador (datos nativos) o-N
(nativo Unicode), no se insertan terminadores.Si un comando bcp interactivo contiene la
in
opción oout
sin el modificador de archivo de formato (-f
) o un modificador de formato de datos (-n
,-c
,-w
o-N
) y decide no especificar la longitud del prefijo y la longitud del campo, el comando solicita el terminador de campo de cada campo, con un valor predeterminado de ninguno:Enter field terminator [none]:
Generalmente, el valor predeterminado es una opción apropiada. Sin embargo, para los campos de datos char o nchar, consulte la subsección siguiente, "Directrices para usar terminadores". Para obtener un ejemplo que muestre este mensaje en contexto, vea Especificar formatos de datos de compatibilidad al usar bcp (SQL Server).
Nota:
Después de que se especifiquen de forma interactiva todos los campos de un comando bcp, el comando solicita que guarde sus respuestas para cada campo en un archivo que no tenga el formato XML. Para obtener más información sobre los archivos de formato no XML, vea Usar archivos de formato no XML (SQL Server).
Directrices para usar terminadores
En algunas situaciones, un terminador resulta útil para un campo de datos char o nchar . Por ejemplo:
Para una columna de datos que contiene un valor NULL en un archivo de datos que se importará en un programa que no comprenda la información de longitud del prefijo.
Cualquier columna de datos que contenga un valor NULL se considera de longitud variable. En ausencia de longitudes de prefijo, se necesita un terminador para identificar el final de un campo NULL, lo que garantiza la correcta interpretación de los datos.
En el caso de una columna de longitud fija larga cuyo espacio solo se utiliza parcialmente en numerosas filas.
En este caso, si se especifica un terminador, se puede minimizar el espacio de almacenamiento, lo que permitiría que el campo fuera tratado como un campo de longitud variable.
Especificar \n
como terminador de fila para la exportación masiva
Al especificar \n
como terminador de fila para la exportación masiva o usar de forma implícita el terminador de fila predeterminado, bcp da lugar a una combinación de retorno de carro y avance de línea (CRLF) como terminador de fila. Si desea generar un solo carácter de avance de línea (LF) como terminador de fila (como suele ocurrir en los equipos Unix y Linux), use la notación hexadecimal para especificar el terminador de fila de LF. Por ejemplo:
bcp -r '0x0A'
Ejemplos
En este ejemplo se exportan de forma masiva los datos de la tabla AdventureWorks2022.HumanResources.Department
al archivo de datos Department-c-t.txt
usando el formato de caracteres, con una coma como terminador de campo y el carácter de nueva línea (\n) como terminador de fila.
El comando bcp contiene los siguientes modificadores.
Conmutador | Descripción |
---|---|
-c |
Especifica que los campos de datos se cargarán como datos de caracteres. |
-t , |
Especifica una coma (,) como terminador de campo. |
-r \n |
Especifica el terminador de fila como un carácter de nueva línea. Este es el terminador de fila predeterminado, por lo que es opcional especificarlo. |
-T |
Especifica que la utilidad bcp se conecta a SQL Server con una conexión de confianza utilizando la seguridad integrada. Si -T no se especifica, debe especificar -U y -P iniciar sesión correctamente. |
Para obtener más información, consulte bcp Utility.
En el símbolo del sistema de Microsoft Windows, especifique:
bcp AdventureWorks2022.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T
Esto crea Department-c-t.txt
, que contiene 16 registros con cuatro campos cada uno. Los campos se separan mediante una coma.
Especificación de terminadores para la importación masiva
Cuando realice una importación de datos en bloque char o nchar , el comando de importación en bloque debe reconocer los terminadores que se usan en el archivo de datos. La forma de especificar los terminadores depende del comando de importación masiva, tal como se indica a continuación:
Bcp
La especificación de terminadores para una operación de importación utiliza la misma sintaxis que para una operación de exportación. Para obtener más información, vea Especificar terminadores para la exportación masiva, anteriormente en este artículo.
BULK INSERT
Los terminadores se pueden especificar para campos individuales en un archivo de formato o para todo el archivo de datos mediante los calificadores que se muestran en la tabla siguiente.
Calificador: Descripción FIELDTERMINATOR = '<field_terminator>'
Especifica el terminador de campo que se utilizará para los archivos de caracteres y de caracteres Unicode.
El valor predeterminado es\t
(carácter de tabulación).ROWTERMINATOR = '<row_terminator>'
Especifica el terminador de fila que se utilizará para los archivos de caracteres y de caracteres Unicode.
El valor predeterminado es\n
(carácter de nueva línea).Para obtener más información, vea BULK INSERT.
INSERT ... SELECT * FROM OPENROWSET(BULK...)
Para el
OPENROWSET
proveedor de conjuntos de filas masivas, los terminadores solo se pueden especificar en el archivo de formato (que es necesario excepto para los tipos de datos de objetos grandes). Si un archivo de caracteres utiliza un terminador no predeterminado, debe definirse en el archivo de formato. Para obtener más información, vea Crear un archivo de formato (SQL Server) y Usar un archivo de formato para importar datos en bloque (SQL Server).Para obtener más información sobre la
OPENROWSET BULK
cláusula , vea OPENROWSET (BULK).
Especificar \n
como terminador de fila para la importación masiva
Cuando se especifica \n
como terminador de fila para la importación masiva, o se usa implícitamente el terminador de fila predeterminado, bcp y la BULK INSERT
instrucción esperan una combinación de avance de retorno de carro (CRLF) como terminador de fila. Si el archivo de origen usa solo un carácter de fuente de líneas (LF) como terminador de fila, como sucede en los archivos generados en equipos Unix y Linux, use la notación hexadecimal para especificar el terminador de fila LF. Por ejemplo, en una BULK INSERT
instrucción :
ROWTERMINATOR = '0x0A'
Ejemplos
En los ejemplos de esta sección se importan de forma masiva caracteres del archivo de datos Department-c-t.txt
creado en el ejemplo anterior en la tabla myDepartment
de la base de datos de ejemplo AdventureWorks2022
. Antes de poder ejecutar los ejemplos, debe crear esta tabla. Para crear esta tabla en el esquema, en el dbo
Editor de consultas de SQL Server Management Studio, ejecute el código siguiente:
USE AdventureWorks2022;
GO
DROP TABLE myDepartment;
CREATE TABLE myDepartment
(
DepartmentID SMALLINT,
Name NVARCHAR (50),
GroupName NVARCHAR (50) NULL,
ModifiedDate DATETIME CONSTRAINT
DF_AddressType_ModifiedDate DEFAULT (GETDATE()) NOT NULL
);
GO
A Uso de bcp para especificar terminadores interactivamente
En el ejemplo siguiente se importa de forma masiva el archivo de datos Department-c-t.txt
mediante un comando bcp
. Este comando utiliza los mismos modificadores de comando que el comando de exportación masiva. Para obtener más información, vea Especificar terminadores para la exportación masiva, anteriormente en este artículo.
En el símbolo del sistema de Windows, escriba el siguiente comando:
bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T
B. Uso de BULK INSERT para especificar terminadores interactivamente
En el ejemplo siguiente se importa de forma masiva el archivo de datos Department-c-t.txt
mediante una instrucción BULK INSERT
que utiliza los calificadores que figuran en la siguiente tabla:
Opción | Atributo |
---|---|
DATAFILETYPE = 'char' |
Especifica que los campos de datos se cargarán como datos de caracteres. |
FIELDTERMINATOR = ',' |
Especifica una coma (, ) como terminador de campo. |
ROWTERMINATOR = '\n' |
Especifica el terminador de fila como un carácter de nueva línea. |
Ejecute el código siguiente en el Editor de consultas de SQL Server Management Studio:
USE AdventureWorks2022;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
GO