Por que bcp nula de saída quando a coluna contém uma cadeia vazia e string vazia quando a coluna é nulo?

StackOverflow https://stackoverflow.com/questions/1644731

  •  10-07-2019
  •  | 
  •  

Pergunta

Esta me pareceu um comportamento muito estranho e eu passamos durante a verificação de erros no meu código antes que eu encontrei este

"cópias da tabela de banco de dados ou vista para um arquivo. Se você especificar um arquivo existente, o arquivo será substituído. Ao extrair dados, nota que o utilitário bcp representa uma cadeia vazia como um nulo e uma cadeia nula como um string vazia ". (A partir de http://msdn.microsoft.com/en-us/library/ms162802 aspx )

Obviamente, isso me permitiu resolver o meu problema, mas alguém pode pensar ou alguém sabe a razão pela qual este é o caso?

Foi útil?

Solução

Já faz algum tempo, mas eu tenho certeza que é uma volta para trás compatibilidade / legado para SQL Server 6.5

SQL Server 6.5 não poderia armazenar cadeia vazia: havia sempre um espaço. Isso mudou com o SQL 7

Assim '' -> NULL e ' ' -> '' é correta do ponto de vista história antiga.

Outras dicas

SELECT ARTICULO as Articulo, 
        case when rtrim(CCOLOR) = '' then null else rtrim(CCOLOR) end as Color, 
        case when rtrim(TALLE) = '' then null else rtrim(TALLE) end as Talle,
from precios

Enviar null no lugar de vazio.

I encontrar a melhor solução aqui:

https: // bytes .com / tema / sql-server / respostas / 143738-bcp-inserindo-branco-espaço vazio cordas

Eu encontrei um em torno do trabalho, utilizando uma estrutura Case no sql consulta para alterar seqüência vazia para um valor nulo. O BCP, por sua vez emite o resultante null como um vazio! Obrigado pela sua assistência. Eric

Isto está relacionado com a secção "valores padrão" para BCP:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during-bulk -import-sql-server

Por exemplo, se há um campo nulo em um arquivo de dados, o valor padrão para a coluna é carregado em vez.

Você tem que pensar de volta aos dias em que importação de arquivos de texto simples a partir de outros sistemas de estranhos. BCP traduz '' como "não definido" (= falta de dados) e define um NULL no banco de dados (= dados em falta). A outra maneira em torno de um NULL de banco de dados deve ser um '' para os outros sistemas.

Para obter os dados 'reais' do uso de banco de dados o interruptor -k:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during -bulk-import-sql-server # keep_nulls

Os seguintes qualificadores especificar que um campo em branco no ficheiro de dados conserva o seu valor nulo durante a operação de importação em massa, em vez de herdar um valor padrão (se qualquer) para as colunas da tabela.

Depois de ter seu 0x0 ASCII no seu arquivo / banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top