none
Derived Column dúvidas RRS feed

  • Pergunta

  • Olá pessoal, boa tarde.

    Estou com um problema no desenvolvimento de um ETL, talvez alguém já tenha passado por isso.

    Busco os dados de um arquivo texto e um dos campo é uma data, quando esta data vem vazia é inserido no banco de dados o valor "1899-12-31 00:00:000" e eu preciso que seja inserido o valor "NULL".

    Para corrigir isso estou tentando tratar no derived column da seguinte forma: 

    (ColunaData == "") || (isnull(ColunaData)) ? "null": ColunaData

    mas desta forma não funciona, alguém já passou por isso antes, podem me ajudar a tratar esta situação?

    Obrigado a todos,

    SeuBell

    segunda-feira, 23 de fevereiro de 2015 20:36

Respostas

  • SeuBell,

    Bom dia!

    Para passar valores nulos em colunas derivadas você precisa utilizar uma NULL FUNCTION no caso do campo tipo data você deve utilizar NULL(DT_DATE) ao invés de "null" no seu código ficando assim:

    (ColunaData == "") || (isnull(ColunaData)) ? NULL(DT_NULL): ColunaData


    [MCP | MCSA Microsoft SQL Server 2012 | MCTS Microsoft Dynamics CRM 2011]

    terça-feira, 24 de fevereiro de 2015 12:29
  • Pessoal, 

    Identifiquei que no próprio SSIS tem uma opção para estes casos.

    Se eu marcar a opção "Retain null values from the source as null values in the data flow" no Flat File Source Editor ele anula o default do SQL Server e deixa o campo com NULL.

    Obrigado a todos pela força.

    

    segunda-feira, 9 de março de 2015 17:59
  • Para quem está no post e ainda não conseguiram resolver o problema pelo componente Derived Column.

    A sintaxe correta é sua_coluna == "NULL" ? NULL(DT_WSTR,50) : sua_coluna.

    sexta-feira, 27 de novembro de 2015 17:22

Todas as Respostas

  • SeuBell,

    Bom dia!

    Para passar valores nulos em colunas derivadas você precisa utilizar uma NULL FUNCTION no caso do campo tipo data você deve utilizar NULL(DT_DATE) ao invés de "null" no seu código ficando assim:

    (ColunaData == "") || (isnull(ColunaData)) ? NULL(DT_NULL): ColunaData


    [MCP | MCSA Microsoft SQL Server 2012 | MCTS Microsoft Dynamics CRM 2011]

    terça-feira, 24 de fevereiro de 2015 12:29
  • Marcos, obrigado pela resposta.

    Fiz incluindo o NULL(DT_DATE) no lugar do "null" mas ao invés de NULL, ele insere a data 1899-12-31 00:00:000 no SQL Server, não funcionou conforme o previsto.

    Será que tem outra forma de realizar esta transformação?

    Obrigado

    terça-feira, 24 de fevereiro de 2015 18:27
  • SeuBell,

    Então por padrão uma data Nula é tratada e reconhecida como 1899-12-31 que é considerada a data base para armazenamento de dados em um banco, com base, nas configurações do seu sistema operacional.

    Provavelmente o Integration Services esta entendendo que a data é Nula!!!!

    Na função IsNull, você pode tentar especificar uma data, talvez tentar utilizar uma função similar ao GetDate().


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 25 de fevereiro de 2015 14:08
    Moderador
  • Pessoal, 

    Identifiquei que no próprio SSIS tem uma opção para estes casos.

    Se eu marcar a opção "Retain null values from the source as null values in the data flow" no Flat File Source Editor ele anula o default do SQL Server e deixa o campo com NULL.

    Obrigado a todos pela força.

    

    segunda-feira, 9 de março de 2015 17:59
  • Para quem está no post e ainda não conseguiram resolver o problema pelo componente Derived Column.

    A sintaxe correta é sua_coluna == "NULL" ? NULL(DT_WSTR,50) : sua_coluna.

    sexta-feira, 27 de novembro de 2015 17:22