Eu tenho uma tabela com a coluna nchar(32), com a pesquisa FullText e o rastreamento automático de alterações ativados.
Conjunto de dados:
Name, SuperID
Item1, (LO}(bJ$
Item2, (LO}(bJ$
Item3, (LO}(bJ$
Eu executo duas consultas:
select Name, SuperID from Asset A WHERE A.SuperID LIKE
N'%(LO}(bJ$%'
e
select Name, SuperID from Asset A WHERE ( CONTAINS
(A.SuperID ,N'"(LO}(bJ$"') )
O primeiro retorna 3 linhas e o segundo retorna apenas 1 linha.
Por que está acontecendo? Como posso analisar o conteúdo do índice de pesquisa Full Text? Os valores da coluna nos três primeiros resultados são idênticos. Eu tentei atualizar índices/estatísticas, mas isso não altera o resultado.
ATUALIZAÇÃO: Tentei remover aspas em torno da consulta CONTAINS, mas recebo uma mensagem de erro:
"Erro de sintaxe próximo a '(' na condição de pesquisa de texto completo
ATUALIZAÇÃO2:
Eu deveria ter formulado minha pergunta de uma maneira diferente, eu acho! Dê uma olhada nos valores da coluna SuperID para as três linhas que eu gostaria de retornar. Eu os converti em VARBINARY para garantir que não haja truques ocultos no espaço à direita e eles sejam realmente os mesmos:
SuperIDasBinary
0x28004C004F007D00280062004A0024002..
0x28004C004F007D00280062004A0024002..
0x28004C004F007D00280062004A0024002..
Então, por que a consulta CONTAINS acima retorna apenas uma linha em vez de três?
Ao tentar recriar o problema com uma nova tabela em um banco de dados separado, acabei comparando as configurações do catálogo de texto completo. No banco de dados em que vi o comportamento errôneo, o valor de alterações pendentes de texto completo da tabela era 21219 (!).
Em seguida, verifiquei o log do FT e descobri que a tabela de ativos não é atualizada há muito tempo:
e também
Eu tive que retomar manualmente as atualizações do FT. Depois disso, a pesquisa retornou 3 itens!