Pergunta

Eu tenho um pacote SSIS que estou desenvolvendo. Eu estou tentando gravar dados a partir do SQL Server 2005 para MS Access 2007.

Estou muito perplexo sobre como converter um char SQL campo (1) para um Access Sim / Não campo.

A partir das informações que reunimos, o equivalente SQL de um campo de Acesso Sim / Não seria um campo de bits, com valores de 0 ou 1.

caractere My SQL (1) campo (que é o meu campo de origem), contém "N" ou "Y". Eu não tenho a opção de usar um campo de bits, daí o meu dilema. Eu tentei fundição para booleanos e inteiros e não tiveram qualquer sucesso.

Na minha tarefa de fluxo de dados, eu tentei criar expressões regulares sem sucesso, e derivado colunas, transformações de dados, etc sem sucesso. Eu estou preso.

Eu vi alguns exemplos sobre como construir instruções condicionais que percorrer as coleções .Row. Isto parece um pouco ao mar, ter que escrever condições para verificações nulo ou valores de cadeia.

No link MSDN SSIS equivalente a DTS Transform Data Task Properties ... tem algum código um pouco semelhante a esta:

If DTSSource("Col010") = "Y" Then
  DTSDestination("X") =  -1
 Else
  DTSDestination("X") =  0
End If

Eu deveria ser capaz de manipular os valores de linha direta, através de código? Desde o campo de origem é um tipo sim / não, não aceita valores inteiros? valores negativos? Sim é verdade "-1" no acesso MS, e eu acho que isso está me confundindo.

Parece que uma expressão regular iria corrigir este problema, mas não tenho certeza como usar isso também.

Existe algo que eu estou com vista? Deve haver uma maneira de converter "CHAR" para "SIM / NÃO".

** Eu sei que é fácil apontar aqui que boa ol' 2000 SQL DTS poderia lidar com isso sem qualquer problema, por padrão, para fora da direita da caixa, instalado por um macaco. Eu estou encontrando-me passar WAAAAY muito tempo com as muito pequenas peculiaridades do SSIS, como este Sim / Não tem problema campo.

Eu sou incapaz de encontrar qualquer documentação sobre o assunto de SSIS e MS Access Sim / Não campos. MSDN não me permite postar uma pergunta. Eu sei, pobre de mim :(

Alguém já se deparar com essa peculiaridade com SSIS e MS Access?

Foi útil?

Solução

Veja este tema em MSDN para obter informações sobre a transformação Coluna derivada.

Ele não aborda especificamente o que você está tentando fazer, mas alguns dos exemplos significa que você deve ser capaz de atingir o seu objetivo. Definir o tipo da coluna de saída derivada para DT_BOOL e usar uma versão de linha de um dos código que você tem acima como o Expression (talvez com um operador ternário?).

E sim, Acesso Jet representa verdadeiro como -1. Falso = 0, e Verdadeiro não é falsa. Se você aplicar um bit a bit Não a 0, você obtém os pares versão complemento de -1.

Update: O armazenamento interno Jet de um booleano é como um Integer (ir figura - mas isso é o que eles escolheram ...). Como tal, Jet campos Sim / Não aceito zero (0) para Falso e não-zero (não apenas -1) para True. Ver comentários

Outras dicas

Para resolver este problema, eu criei uma coluna derivada.

A expressão regular para a coluna é:

[column] == "Y" ? -1 : 0

O tipo de dados é:

single-byte signed integer [DT_I1]

e viola! Jet (aka MS Access, Agradecimentos David W. Fenton!), Agora exibe o meu Sim / Não campos.

Depois de perceber que apenas um registro foi aparecendo na tabela, eu observei os meus dados de teste era inválido e corrigido o problema subjacente.

Esta é uma boa documentação sobre como carvão elenco SQL (1) Campos (com valores de "Y" "N" ou) para MS Access (oooops, eu quis dizer Jet) Sim / Não campos.

Obrigado pela ajuda de todos. Stackoverflow é inestimável.

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