Especificando terminadores de campo e linha

Para campos de dados de caracteres, caracteres terminadores 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.

Observação importanteImportante

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

Caracteres que têm suporte como terminadores

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

Caractere terminador

Indicado por

Tab

\t

Esse é o terminador de campo padrão.

Caractere de nova linha

\n

Esse é o terminador de linha padrão.

Retorno de carro/avanço de linha

\r

Barra invertida1

\\

Terminador nulo (ou invisí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, etc.)

Cadeia de caracteres de até 10 caracteres imprimíveis, incluindo alguns ou todos os terminadores listados anteriormente

(**\t**, end, !!!!!!!!!!, \t—\n, etc.)

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

2 Embora o caractere de controle nulo (\0) não seja visível quando impresso, é 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.

Observação importanteImportante

Se um caractere terminador ocorrer dentro dos dados, ele será interpretado como um terminador, não como dados, e os dados depois daquele caractere serão interpretados como sendo parte do próximo campo ou registro. Portanto, escolha seus terminadores cuidadosamente para ter certeza de que eles nunca aparecerão em seus dados.

Usando 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 saída tabular, termine o último campo de 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 terminador de linha.

ObservaçãoObservação

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

Especificando terminadores para exportação em massa

Quando você exporta em massa dados char ou nchar, e quer 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çãoObservação

    Para obter informações sobre como usar arquivos de formato, consulte Arquivos de formato para importação ou exportação de dados.

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

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

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

      ObservaçãoObservação

      Se você especificar a opção -n (dados nativos) ou -N (dados nativos Unicode), 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 você tiver escolhido não identificar os tamanhos de prefixo e de 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 campos de dados char ou nchar, consulte a seguinte subseção, "Diretrizes para uso de terminadores". Para obter um exemplo que mostra esse prompt no contexto, consulte Especificando formatos de dados para compatibilidade usando bcp.

      ObservaçãoObservação

      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 Compreendendo arquivos de formato não XML.

Diretrizes para 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 de comprimento variável. Na ausência de comprimentos de prefixo, um terminador é necessário para identificar o fim de um campo nulo, assegurando que os dados sejam interpretados corretamente.

  • Para uma coluna de comprimento fixo longo cujo espaço é usado apenas parcialmente 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. Para obter mais informações sobre a interação do comprimento do prefixo, do tamanho do campo e dos terminadores no armazenamento de dados char, consulte Armazenamento de dados em formato de caractere.

Exemplos

Este exemplo exporta dados em massa da tabela AdventureWorksHumanResources.Department para o arquivo de dados Department-c-t.txt usando 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.

Opção

Descrição

-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. Esse é 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, será necessário especificar -U e -P para o logon ser efetuado com êxito.

Para obter mais informações, consulte Utilitário bcp.

No prompt de comando do Microsoft Windows insira:

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

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

Especificando 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 se 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 "Especificando terminadores para exportação em massa", anteriormente neste tópico.

  • BULK INSERT

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

    Qualificador

    Descrição

    FIELDTERMINATOR ='field_terminator'

    Especifica o terminador de campo a ser usado em 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 em arquivos de dados de caracteres e caracteres Unicode.

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

    Para obter mais informações, consulte BULK INSERT (Transact-SQL).

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

    Para o provedor de conjunto de linhas em massa OPENROWSET, podem ser especificados terminadores somente no arquivo de formato (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, consulte Criando um arquivo de formato e Usando um arquivo de formato para importar dados em massa.

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

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 AdventureWorks2008R2. Antes de executar os exemplos, é necessário criar essa tabela. Para criar essa tabela no esquema dbo, no Editor de Consultas SQL Server Management Studio, execute o seguinte código:

USE AdventureWorks2008R2;
GO
DROP TABLE myDepartment;
CREATE TABLE myDepartment 
(DepartmentID smallint,
Name nvarchar(50),
GroupName nvarchar(50) NULL,
ModifiedDate datetime not NULL CONSTRAINT DF_AddressType_ModifiedDate DEFAULT (GETDATE())
);
GO

A. Usando 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 "Especificando terminadores para exportação em massa", anteriormente neste tópico.

No prompt de comando do Windows, insira:

bcp AdventureWorks2008R2..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 AdventureWorks2008R2;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
   WITH (
      DATAFILETYPE = 'char',
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO