Para fazer uma pesquisa, faça:
- uma coluna derivada como a
DT_I4
entrada inteira de quatro bytes que pode ser um0
ou1
, - uma pesquisa em uma coluna da tabela de pesquisa que é um número inteiro de quatro bytes
0
ou1
também.
Coluna de origem:
(DT_I4)(Check1 == "Check1_value")
Coluna de pesquisa:
Ver:
select * from
values(0,'output_for_0')
,(1,'output_for_1')
t (lkp_value, lkp_output)
Com outras colunas para pesquisa ou saída, poderia ser assim:
Se eu não converter 0
e 1
para um tipo de dados escolhido, ele se tornará um número inteiro. Eu uso números inteiros, pois quero poupar o trabalho de converter cada número inteiro em um tipo de dados bit, pois você precisa fazer isso para cada valor em toda a consulta da tabela de pesquisa. Se você tiver apenas as duas linhas, você pode dizer que não importa escrever:
select * from
values(cast(0 as bit),cast('output_for_0' as varchar(100)))
,(cast(1 as bit),cast('output_for_1' as varchar(100)))
t (lkp_value, lkp_output)
Mas eu gosto de mantê-lo em números inteiros simples para me poupar de conversões desagradáveis para cada valor. Faço o mesmo com as outras colunas, não defino o comprimento varchar das colunas de texto e assim por diante, para que meus varchars fiquem varchar(45)
na tabela de consulta, mas fiquem varchar(100)
nas tabelas de entrada e destino. Você pode fazer isso de outra maneira.
Somente a pesquisa 0
to 0
funciona, enquanto a pesquisa 1
to 1
não, embora ambas sejam do mesmo tipo de dados.
Ambos (DT_I4)(Check1 == "Check1_value"
e o valor de pesquisa 1
se tornam o DT_I4
número inteiro 1
se a condição for atendida. Passei o número da coluna derivada para uma tabela de destino para verificar isso.
O que preciso fazer para pesquisar números inteiros provenientes de uma condição booleana em uma coluna derivada convertida como um número inteiro?
Ao verificar isso, tentei a
2
em vez de a1
e só porque precisava de um "if-quando-else" para isso, escrevi:e mapeei isso para a tabela de pesquisa para a qual alterei a coluna de
1
para2
também. E funcionou. Eu então mudei2
para1
:e funcionou também.
Portanto, você deve codificar com "if-when-else", mesmo que a saída do tipo de dados seja a mesma
DT_I4
em ambos os lados, caso contrário.Não sei por que isso acontece. Você encontra outras coisas estranhas sobre a pesquisa do SSIS, por exemplo:
PS
Isso não ajuda:
Ou: