Compartilhar via


Especificar terminadores de linha e de campo (SQL Server)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

Importante

Quando você usa formato nativo ou nativo Unicode, usa prefixos de comprimento em vez de terminadores de campo. Dados de formato nativo podem conflituar com terminadores, pois um arquivo de dados de formato nativo é armazenado no formato de dados binário interno do Microsoft SQL Server.

Caracteres com suporte como terminadores

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

Caractere terminador Indicado por Descrição
Tabulação \t Este é o terminador de campo padrão.
Caractere de nova linha. \n Este é o terminador de linha padrão.
Retorno de carro/avanço de 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, guia, nova linha e retorno de carro) (*, A, t, e lassim por diante)
Cadeia de caracteres de até 10 caracteres imprimíveis, incluindo alguns ou todos os terminadores listados anteriormente (**\t**, end, !!!!!!!!!!, e \t-\nassim por diante)

1 Somente os tcaracteres , , ne r0\0 , trabalhar com o caractere de escape de barra invertida, para produzir um caractere de controle.

2 Embora o caractere de controle nulo (\0) não esteja 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 de linha é diferente de não ter nenhum terminador de campo ou de linha.

Importante

Se um caractere do 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 seus terminadores cuidadosamente para ter certeza de que eles nunca aparecerão em seus dados. Por exemplo, um terminador de campo substituto baixo não será uma boa opção para um terminador de campo se os dados contiverem esse substituto baixo.

Usar terminadores de linha

O terminador de linha pode ser o mesmo caractere que o terminador do último campo. Porém, geralmente um terminador de linha distinto é útil. Por exemplo, para produzir a 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 guia (\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.

Observação

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

Especificar terminadores para exportação em massa

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

  • Com um arquivo de formato que especifica o terminador campo por campo.

    Observação

    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 opção -t para especificar o terminador de campo para todos os campos, exceto o último campo na linha e usando a opção -r para especificar um terminador de linha.

    • Use um comutador de formato de caractere (-c ou -w) sem o -t comutador, que define o terminador de campo como o caractere de guia. \t Isso é o mesmo que especificar -t\t.

      Observação

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

    • Se um comando bcp interativo contiver a opção in ou out sem o comutador de arquivo de formato (-f) ou um comutador de formato de dados (-n, -c, -wou -N), e você 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 um padrão nenhum:

      Enter field terminator [none]:

      Geralmente, o padrão é uma escolha adequada. No entanto, para os campos de dados char ou nchar , consulte a seguinte subseção, "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).

      Observação

      Depois que você especificar interativamente todos os campos em um comando bcp, o comando solicitará que 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 usar 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 de comprimento variável. Na ausência de comprimentos de prefixos, um terminador é necessário para identificar o término de um campo nulo, com a certeza de que os dados são corretamente interpretados.

  • Para uma coluna longa de comprimento fixo cujo espaço é apenas parcialmente usado por várias 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 retorna um retorno de carro/alimentação de linha (CRLF) como o terminador da linha. Se você quiser gerar somente um caractere de alimentação de linha (LF) como o terminador de linha, como normalmente ocorre em computadores Unix e Linux, use uma notação hexadecimal para especificar o terminador de linha de LF. Por exemplo:

bcp -r '0x0A'

Exemplos

Este exemplo exporta os dados em massa 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 opções a seguir.

Alternar Descrição
-c Especifica que os campos de dados sejam carregados como dados de caracteres.
-t , Especifica o uma vírgula (,) como terminador de campo.
-r \n Especifica o terminador de linha como um caractere de nova linha. Esse é o terminador de linha padrão, portanto, especifique-o como 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 logon com êxito.

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

No prompt de comando do Microsoft Windows, insira:

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

Isso cria Department-c-t.txtque contém 16 registros com quatro campos cada. Os campos estão separados por uma vírgula.

Especificar terminadores para importação em massa

Quando você importa em massa dados char ou nchar , o comando de importação em massa deve reconhecer os terminadores usados no arquivo de dados. A especificação dos terminadores depende do comando de importação em massa, como segue:

  • Bcp

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

  • BULK INSERT

    Terminadores podem ser especificados para campos individuais em um arquivo de formato ou para todo o arquivo de dados usando os qualificadores mostrados na tabela a seguir.

    Qualificador Descrição
    FIELDTERMINATOR = '<field_terminator>' Especifica o terminador de campo a ser usado para arquivos de caracteres e dados de caracteres Unicode.

    O padrão é \t (caractere de tabulação).
    ROWTERMINATOR = '<row_terminator>' Especifica o terminador de linha a ser usado para arquivos de caracteres e dados de 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 provedor de OPENROWSET conjunto de linhas em massa, os terminadores só podem ser especificados no arquivo de formato (o que é necessário, exceto para tipos de dados de objeto grande). Se um arquivo de dados de caracteres usar um terminador não padrão, ele deverá ser definido no arquivo de formato. Para obter mais informações, veja Criar um arquivo de formato (SQL Server) e Usar um arquivo de formato para importação de dados em massa (SQL Server).

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

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

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

ROWTERMINATOR = '0x0A'

Exemplos

Os exemplos nesta seção importam em massa dados de caracteres do arquivo de dados Department-c-t.txt criado no exemplo anterior na tabela myDepartment no banco de dados de exemplo AdventureWorks2022 . Antes de executar os exemplos, é necessário criar essa 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

R. Usando o bcp para especificar terminadores interativamente

O exemplo a seguir importa em massa o arquivo de dados Department-c-t.txt usando um comando bcp . Esse 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. Usando BULK INSERT para especificar terminadores interativamente

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

Opção Atributo
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