2009-04-22 8 views
0

J'ai une configuration de catalogue de texte complet. Il a un nombre de clés unique de 117 avec 19 articles. La table a seulement 19 lignes.Ma requête ContainsTable ne fonctionne pas - aidez s'il vous plaît :)

La table possède un champ NVARCHAR (50) appelé ClientGuid. C'est un guid avec un texte bizarre à la fin.

par exemple ..

  1. 8b6ef4a504dd1a57f079180e7f6eb4a0 (-)
  2. 8b6ef4a504dd1a57f079180e7f6eb4a0 (OK)

(et non, je ne l'ai pas défini que les données de champ de texte - nous de l'approvisionnement, il d'une tierce partie API

de suite, ceci est mon sql et la requête que je cours contre lui Quand je cours la requête, j'obtiens des résultats ZÉRO de retour :(

ALTER FUNCTION [dbo].[Foo_HiJonSkeet] 
( 
    @ClientGuid NVARCHAR(50) 
) 
RETURNS TABLE 
AS 
RETURN 
(
    SELECT KEY_TBL.[Key] as LogEntryId, 
     KEY_TBL.RANK as Relevance 
    FROM CONTAINSTABLE(LogEntries, ClientGuid, @ClientGuid) AS KEY_TBL 
) 


SELECT * FROM Foo_HiJonSkeet('8b') 

Des suggestions? Server est Sql Server 2008.

Répondre

0

Vous pouvez essayer la construction suivante:

SELECT * FROM Foo_HiJonSkeet('"8b*"') 

ajouter les guillemets doubles et un astérisque après le terme de recherche d'origine. Ça devrait marcher.

Mais dans le cas où toutes les recherches seront similaires à l'exemple que vous avez posté ci-dessus, je vous conseille d'utiliser l'instruction LIKE au lieu d'utiliser la recherche en texte intégral.

+0

par intérêt, pourquoi AIMER au lieu de CONTAINS? –

+0

@ Pure.Krome, en quelques mots: 'LIKE ('8b *')' expression pourrait utiliser index sur cette colonne si elle est définie; malgré que le prédicat 'LIKE' ne fonctionne que sur les modèles de caractères, votre exemple est un tel cas; aussi 'LIKE' est aussi plus intuitif ici. – Alex

Questions connexes