segunda-feira, 4 de janeiro de 2010

Resolvendo conflitos de COLLATE

Já passei por diversos problemas com COLLATE de banco de dados, mas somente hoje decidi apresentar uma solução para o problema.

Ao executar uma query similar a apresentada abaixo:

SELECT            
    F.ID_codigo
   ,sum(F.vl_devido)            
    ,Max(F.qt_dia_atraso)           
    ,Max(F.nu_behavior_score) 
FROM
    ##tb_tabela_global F (nolock)  
WHERE
    AND F.nu_digito_cpf IN (select Final from #FinaisCPF)           
    AND F.cd_tipo_pessoa IN (select TP_PESSOA from #TipoPesssoaFisicaJuridica (Nolock))  
GROUP BY
    F.ID_codigo 
HAVING
    SUM(F.vl_devido) BETWEEN 0.00 AND 999999999.99

Debugando o código, descobri que o problema estava no segundo IN:


    AND F.cd_tipo_pessoa IN (select TP_PESSOA from #TipoPesssoaFisicaJuridica (Nolock))  

O código resulta o seguinte erro:

"Cannot resolve collation conflict for equal to operation"

Resolvi o problema, alterando o COLLATE dos campos da query:

AND F.cd_tipo_pessoa COLLATE DATABASE_DEFAULT IN (select TP_PESSOA COLLATE DATABASE_DEFAULT from #TipoPesssoaFisicaJuridica (Nolock))  

Até a próxima!

Nenhum comentário:

Postar um comentário

Leave your comment here!