Por que bcp nula de saída quando a coluna contém uma cadeia vazia e string vazia quando a coluna é nulo?
-
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?
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:
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:
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
:
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.