Partilhar via


Especificar terminadores de campo e linha (SQL Server)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)ponto de extremidade de análise SQL no Microsoft FabricWarehouse no Microsoft Fabric

Para campos de dados de caracteres, caracteres de terminação opcionais permitem marcar o final de cada campo em um arquivo de dados com um terminador de campo e o final de cada linha com um terminador de linha. Os caracteres de terminação são uma maneira de indicar aos programas que leem o arquivo de dados onde um campo ou linha termina e outro campo ou linha começa.

Important

Ao usar o formato nativo ou Unicode, use prefixos de comprimento em vez de terminadores de campo. Os dados de formato nativo podem entrar em conflito com terminadores porque um arquivo de dados de formato nativo é armazenado no formato de dados binários internos do Microsoft SQL Server.

Caracteres suportados como terminadores

O comando bcp, a instrução BULK INSERT e o OPENROWSET provedor de conjunto de linhas em massa suportam vários caracteres como terminadores de campo ou de linha e sempre procuram a primeira instância de cada terminador. A tabela a seguir lista os caracteres suportados para terminadores.

Personagem terminante Indicado por Description
Tab \t Este é o terminador de campo padrão.
Caractere de nova linha \n Este é o terminador de linha padrão.
Retorno do carro/alimentação da linha \r
Barra invertida 1 \
Terminador nulo (terminador não visível) 2 \0
Qualquer caractere imprimível (caracteres de controle não são imprimíveis, exceto nulo, tabulação, nova linha e retorno de carro) (*, A, t, l, e assim por diante)
String de até 10 caracteres imprimíveis, incluindo todos ou alguns dos terminadores listados anteriormente (**\t**, end, !!!!!!!!!!, \t-\n, e assim por diante)

1 Apenas os t, n, r, 0, e \0 caracteres funcionam com o caractere de escape de barra invertida para produzir um caractere de controlo.

2 Embora o caractere de controle nulo (\0) não seja visível quando impresso, ele é um caractere distinto no arquivo de dados. Isso significa que usar o caractere de controle nulo como um terminador de campo ou linha é diferente de não ter nenhum campo ou terminador de linha.

Important

Se um caractere terminador ocorrer dentro dos dados, o caractere será interpretado como um terminador, não como dados, e os dados após esse caractere serão interpretados como pertencentes ao próximo campo ou registro. Portanto, escolha os seus delimitadores cuidadosamente para garantir que eles nunca apareçam nos seus dados. Por exemplo, um terminador de campo substituto baixo não é uma boa escolha para um terminador de campo se os dados contiverem esse substituto baixo.

Utilize terminadores de linha

O terminador de linha pode ser o mesmo caractere que o do último campo. Geralmente, no entanto, um terminador de linha distinto é útil. Por exemplo, para produzir saída tabular, encerre o último campo em cada linha com o caractere de nova linha (\n) e todos os outros campos com o caractere de tabulação (\t). Para colocar cada registro de dados em sua própria linha no arquivo de dados, especifique a combinação \r\n como o terminador de linha.

Note

Quando se usa bcp interativamente e se especifica \n (newline) como terminador de linha, bcp automaticamente prefixa-o com um caractere \r (retorno de carro), o que resulta em um terminador de linha de \r\n.

Especificar terminadores para exportação em massa

Quando você exporta dados char ou nchar em massa e deseja usar um terminador não padrão, você deve especificar o terminador para o comando bcp . Você pode especificar terminadores de qualquer uma das seguintes maneiras:

  • Com um ficheiro de formato que especifica o terminador para cada campo.

    Note

    Para obter informações sobre como usar arquivos de formato, consulte Formatar arquivos para importar ou exportar dados (SQL Server).

  • Sem um arquivo de formato, existem as seguintes alternativas:

    • Use a -t opção para especificar o terminador de campo para todos os campos, exceto o último campo na linha e usando a -r opção para especificar um terminador de linha.

    • Use uma opção de formato de caractere (-c ou -w) sem a opção -t, que define o terminador do campo no caractere de tabulação, \t. Isso é o mesmo que especificar -t\t.

      Note

      Se especificar a opção -n (dados nativos) ou a opção -N (dados Unicode nativos), os terminadores não serão inseridos.

    • Se um comando interativo bcp contiver a opção in ou out sem a opção de arquivo de formato (-f) ou uma opção de formato de dados (-n, -c, -w, ou -N), e se optar por não especificar o comprimento do prefixo e o comprimento do campo, o comando solicitará o terminador de campo de cada campo, com o padrão a ser nenhum:

      Enter field terminator [none]:

      Geralmente, o padrão é uma escolha adequada. No entanto, para campos de dados char ou nchar, consulte a subseção a seguir, "Diretrizes para usar terminadores". Para obter um exemplo que mostra esse prompt no contexto, consulte Especificar formatos de dados de compatibilidade ao usar bcp (SQL Server).

      Note

      Depois de especificar interativamente todos os campos em um comando bcp , o comando solicita que você salve suas respostas para cada campo em um arquivo de formato não XML. Para obter mais informações sobre arquivos de formato não XML, consulte Usar arquivos de formato não XML (SQL Server).

Diretrizes para o uso de terminadores

Em algumas situações, um terminador é útil para um campo de dados char ou nchar . Por exemplo:

  • Para uma coluna de dados que contém um valor nulo em um arquivo de dados que será importado para um programa que não entende as informações de comprimento do prefixo.

    Qualquer coluna de dados que contenha um valor nulo é considerada comprimento variável. Na ausência de comprimentos de prefixo, um terminador é necessário para identificar o final de um campo nulo, certificando-se de que os dados são interpretados corretamente.

  • Para uma coluna longa de comprimento fixo cujo espaço é apenas parcialmente utilizado por muitas linhas.

    Nessa situação, especificar um terminador pode minimizar o espaço de armazenamento, permitindo que o campo seja tratado como um campo de comprimento variável.

Especificar \n como um terminador de linha para exportação em massa

Quando você especifica \n como um terminador de linha para exportação em massa ou usa implicitamente o terminador de linha padrão, o bcp gera uma combinação de alimentação de linha de retorno de carro (CRLF) como o terminador de linha. Se quiser produzir apenas o caractere de mudança de linha (LF) como terminador de linha - como é típico em sistemas Unix e Linux -, utilize a notação hexadecimal para especificar o terminador LF. Por exemplo:

bcp -r '0x0A'

Examples

Este exemplo exporta em massa os dados da tabela AdventureWorks2022.HumanResources.Department para o arquivo de dados Department-c-t.txt usando o formato de caractere, com uma vírgula como terminador de campo e o caractere de nova linha (\n) como terminador de linha.

O comando bcp contém as seguintes opções.

Switch Description
-c Especifica que os campos de dados sejam carregados como dados de caracteres.
-t , Especifica uma vírgula (,) como terminador de campo.
-r \n Especifica o terminador de linha como um caractere de nova linha. Este é o terminador de linha padrão, portanto, especificá-lo é opcional.
-T Especifica que o utilitário bcp se conecta ao SQL Server com uma conexão confiável usando segurança integrada. Se -T não for especificado, você precisará especificar -U e -P fazer login com êxito.

Para obter mais informações, consulte bcp Utility.

No prompt de comando do Microsoft Windows, digite:

bcp AdventureWorks2022.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T

Isso cria Department-c-t.txt, que contém 16 registos com quatro campos cada. Os campos são separados por uma vírgula.

Especificar terminadores para importação em massa

Quando você importa dados char ou nchar em massa, o comando bulk-import deve reconhecer os terminadores usados no arquivo de dados. A forma como os terminadores podem ser especificados depende do comando bulk-import, da seguinte maneira:

  • bcp

    A especificação de terminadores para uma operação de importação usa a mesma sintaxe de uma operação de exportação. Para obter mais informações, consulte Especificar terminadores para exportação em massa, anteriormente neste artigo.

  • BULK INSERT

    Os terminadores podem ser especificados para campos individuais num ficheiro de formato ou para todo o ficheiro de dados, usando os qualificadores mostrados na tabela a seguir.

    Qualifier Description
    FIELDTERMINATOR = '<field_terminator>' Especifica o terminador de campo a ser usado para arquivos de dados de caracteres e caracteres Unicode.

    O padrão é \t (caractere de tabulação).
    ROWTERMINATOR = '<row_terminator>' Especifica o terminador de linha a ser usado para arquivos de dados de caracteres e caracteres Unicode.

    O padrão é \n (caractere de nova linha).

    Para obter mais informações, consulte BULK INSERT.

  • INSERT ... SELECT * FROM OPENROWSET(BULK...)

    Para o fornecedor de conjunto de linhas em massa OPENROWSET, os terminadores podem ser especificados apenas no arquivo de formato, o qual é exigido, exceto para tipos de dados de objeto grande. Se um arquivo de dados de caractere usar um terminador não padrão, ele deverá ser definido no arquivo de formato. Para obter mais informações, consulte Criar um arquivo de formato (SQL Server) e Usar um arquivo de formato para importar dados em massa (SQL Server).

    Para obter mais informações sobre a OPENROWSET BULK cláusula, consulte OPENROWSET (BULK).

Especificar \n como terminador de linha para importação em massa

Quando você especifica \n como um terminador de linha para importação em massa ou usa implicitamente o terminador de linha padrão, bcp e a BULK INSERT instrução esperam uma combinação de alimentação de linha de retorno de carro (CRLF) como o terminador de linha. Se o seu arquivo de origem usa apenas um caractere de alimentação de linha (LF) como terminador de linha, como é típico em arquivos gerados em computadores Unix e Linux, use notação hexadecimal para especificar o terminador de linha LF. Por exemplo, numa BULK INSERT declaração:

ROWTERMINATOR = '0x0A'

Examples

Nesta seção, os exemplos importam em massa dados de caracteres do arquivo de dados Department-c-t.txt criado no exemplo anterior para a tabela myDepartment na base de dados de exemplo AdventureWorks2025. Antes de executar os exemplos, você deve criar esta tabela. Para criar essa tabela no esquema, no Editor de Consultas do dbo SQL Server Management Studio, execute o seguinte código:

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. Use o comando bcp para especificar de forma interativa os terminadores

O exemplo a seguir importa em massa o Department-c-t.txt arquivo de dados usando um bcp comando. Este comando usa as mesmas opções de comando que o comando de exportação em massa. Para obter mais informações, consulte Especificar terminadores para exportação em massa, anteriormente neste artigo.

No prompt de comando do Windows, digite o seguinte comando:

bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T

B. Utilize BULK INSERT para especificar de forma interativa terminadores.

O exemplo a seguir importa em massa o Department-c-t.txt arquivo de dados usando uma BULK INSERT instrução que usa os qualificadores mostrados na tabela a seguir.

Option Attribute
DATAFILETYPE = 'char' Especifica que os campos de dados sejam carregados como dados de caracteres.
FIELDTERMINATOR = ',' Especifica uma vírgula (,) como terminador de campo.
ROWTERMINATOR = '\n' Especifica o terminador de linha como um caractere de nova linha.

No Editor de Consultas do SQL Server Management Studio, execute o seguinte código:

USE AdventureWorks2022;
GO

BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
WITH (
     DATAFILETYPE = 'char',
     FIELDTERMINATOR = ',',
     ROWTERMINATOR = '\n'
);
GO