INF: BCP e valores NULL

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 98620
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Um número de perguntas surgem com freqüência sobre o utilitário BCP e valores nulos quando estiver trabalhando com arquivos de dados de caracteres de comprimento fixo. Este artigo aborda essas perguntas.
Mais Informações
Há um problema inerente com representando o valor NULL, porque não há um padrão ASCII ou representação de caracteres para NULL.

Considere os casos a seguir, no qual "SQL" representa o servidor de banco de dados, e "FILE" representa a entrada ou saída de arquivo de dados BCP.

BCP DE CARACTERE DE COMPRIMENTO FIXO, QUALQUER CAMPO, EXCETO A ÚLTIMA
FILE     SQL----     ---spaces   -> spaces (CHAR NULL col.)spaces   <- CHAR NULLspaces   -> 0 (INT NULL col.)spaces   <- INT NULL				

No primeiro caso acima, observe que espaços no arquivo de dados de entrada são carregados como espaços na tabela SQL. Embora podem parecer espaços no arquivo de dados de entrada representar intuitivamente NULL, o espaço ASCII (0 x 20) também é um caractere legítimo, com significado possível. Portanto, eles são carregados como tal.

No segundo caso, você deve estar imaginando por que CHAR a BCPs NULL saída como espaços. Novamente, isso é devido à falta de uma representação de caracteres padrão para NULL. A seqüência de caracteres "NULL" não pôde ser corretamente gravada o arquivo de saída, porque isso poderia ser uma seqüência de caracteres válida e na entrada ser carregado como a seqüência de caracteres "NULL", não o valor NULL. Além disso, como isso é BCP de comprimento fixo, a largura da coluna deve ser preservada, usando espaços como o caractere mais prático.

Para o terceiro caso, espaços de Observação no arquivo de dados de entrada são carregados como 0 na tabela SQL. Isso não é devido BCP: Lembre-se, isso é dados de BCP do ASCII de modo de caracteres em uma coluna INT, que significa que os dados de caractere devem ser convertidos para INT. O servidor função converte espaços como 0, que é o comportamento apropriado. Embora pareça intuitivamente que espaços devem ser traduzidos para NULL, lembre-se não há nenhuma representação padrão para NULL, e, portanto, não base para esperando espaços a ser convertido em NULL.

No caso quarto, BCPs NULL INT out como espaços por motivos como o segundo caso.

BCP DE CARACTERE DE COMPRIMENTO FIXO, O ÚLTIMO CAMPO NO ARQUIVO
FILE     SQL----     ---spaces   -> spaces (CHAR NULL col.)nothing  <- CHAR NULLnothing  -> CHAR NULLspaces   -> 0 (INT NULL col.)nothing  <- INT NULLnothing  -> INT NULL				

Todos os seis casos acima assumem que um terminador end-of-line é usado.

Para o primeiro e quarto acima casos, observe que espaços no arquivo de dados de entrada são carregados como espaços e 0, respectivamente, por motivos discutidos anteriormente.

Na segunda e quinto acima casos, observe que NULL é BCPed saída como nada. Ou seja, apenas um terminador end-of-line é colocado no arquivo de saída imediatamente após o campo anterior.

A terceira em sexto acima casos, observe que é possível para BCP em um NULL usando BCP de caractere de comprimento fixo. Isso ocorre porque o campo envolvido é o último ou mais à direita um nos dados em arquivo. Por que NULL é carregado nesse caso pode melhor ser visto examinando a maneira somente não-ambígua BCP em valores nulos. Isso é usando campos com delimitadores explícitas, não usando campos de comprimento fixo não delimitado como nos exemplos acima. Com delimitadores explícitas, torna possível colocar duas delimitadores adjacentes no arquivo de entrada, significando tratar "sem dados". Da mesma forma, no caso acima envolvendo o último campo de um arquivo de dados de entrada de BCP de caractere de comprimento fixo, a presença de um terminador end-of-line explícito ou delimitador, torna possível distinguir esse campo como NULL.

A maneira somente não-ambígua para representar NULL em BCP do modo de caracteres é usando dois delimitadores adjacentes em um arquivo delimitado por caractere. Manipulação do arquivo de origem para obter esse estado é possível por meio de várias técnicas. Como alternativa, se 0 ou espaços no coluna do SQL de destino não tiver nenhum significado válido para o banco de dados específico, você pode alterá-la para NULL por meio de uma instrução de UPDATE em massa seguindo o BCP em.

Para obter informações adicionais, clique no número abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
67409INFO: Mais freqüentes perguntas utilitário BCP em SQL
Windows NT

Propriedades

ID do Artigo: 98620 - Última Revisão: 12/04/2015 09:26:53 - Revisão: 3.4

Microsoft SQL Server 4.21a Standard Edition, Microsoft SQL Server 6.0 Standard Edition, Microsoft SQL Server 6.5 Standard Edition, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbinfo KB98620 KbMtpt
Comentários