4 votes

Prédicat plein texte nul ou vide

J'ai obtenu cette erreur lorsque j'ai fourni une valeur nulle à la variable @keyword et j'ai trouvé une solution en fixant la valeur de @keyword à '""'. Le problème est que lorsque la valeur est définie à '""' et que l'on exécute la requête, aucun résultat ne s'affiche, il faut afficher tous les enregistrements. Comment faire ?

declare @keyword nvarchar(50)
set @keyword='""'

SELECT u.Id as AId FROM Users u WHERE FREETEXT((FirstName,Lastname,MiddleName),@keyword)
UNION 
SELECT c.AId FROM Certification c WHERE FREETEXT((Certification,School),@keyword)
UNION 
SELECT ad.AId FROM ApplicantDetails ad WHERE FREETEXT((City,Province,StateorRegion),@keyword)
UNION 
SELECT eb.AId FROM EducationalBackground eb WHERE FREETEXT((School,fieldofStudy),@keyword)
UNION 
SELECT ed.AId FROM EmploymentDetails ed WHERE FREETEXT((Position,DescriptionofDuties,CompanyName,City,Province,StateorRegion),@keyword)
UNION 
SELECT e.AId FROM Expertise e WHERE FREETEXT((Expertise),@keyword)
UNION 
SELECT ge.AId FROM GeographicalExperience ge WHERE FREETEXT(([Description]),@keyword)
UNION 
SELECT t.AId FROM Training t WHERE FREETEXT((Training,School),@keyword)

7voto

user335160 Points 11

Je l'ai obtenu....

    IF ISNULL(@keyword,'') = '' SET @keyword = '""' ;

     SELECT u.Id as AId FROM Users u WHERE @keyword = '""' 
                 OR FREETEXT((FirstName,Lastname,MiddleName),@keyword)
       UNION 
    SELECT c.AId FROM Certification c WHERE @keyword = '""' 
                 OR FREETEXT((Certification,School),@keyword)
       UNION 
    SELECT ad.AId FROM ApplicantDetails ad WHERE @keyword = '""' 
                 OR FREETEXT((City,Province,StateorRegion),@keyword)
       UNION 
    SELECT eb.AId FROM EducationalBackground eb WHERE @keyword = '""' 
                 OR FREETEXT((School,fieldofStudy),@keyword)
       UNION 
    SELECT ed.AId FROM EmploymentDetails ed WHERE @keyword = '""' 
                 OR FREETEXT                                       (Position,DescriptionofDuties,CompanyName,City,Province,StateorRegion),@keyword)
       UNION 
     SELECT e.AId FROM Expertise e WHERE @keyword = '""' 
                 OR FREETEXT((Expertise),@keyword)
       UNION 
   SELECT ge.AId FROM GeographicalExperience ge WHERE @keyword = '""' 
                 OR FREETEXT(([Description]),@keyword)
       UNION 
   SELECT t.AId FROM Training t WHERE @keyword = '""' 
                 OR FREETEXT((Training,School),@keyword)

0voto

derek Points 43

Dans mon cas, j'avais un champ vide avec un saut de ligne de retour de chariot, ou CRLF (Enter). Le test pour Null et la longueur coupée de 0 n'étaient donc pas suffisants. J'ai ajouté un remplacement de CRLF par un espace pour que la longueur coupée ne soit pas considérée comme 0.

SELECT @searchString = REPLACE(@searchString, CHAR(13) + CHAR(10), ' ')
IF(@searchString IS NOT NULL AND LEN(LTRIM(RTRIM(@searchString))) > 0)
BEGIN       
  -- do the search
END

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X