Is Full Text Search CONTAINS clause always evaluated?









up vote
2
down vote

favorite












Is there a way to avoid the error Null or empty full-text predicate in the example below ?



DECLARE @SearchText VARCHAR(1000);
SET @SearchText = ''

SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
AND
*/
(
@SearchText = ''
OR
(
@SearchText <> ''
AND
CONTAINS((myField1, myField2), @SearchText)
)
)


I could be doing like this, but I want to avoid duplicating the code :



DECLARE @SearchText VARCHAR(1000);
SET @SearchText = ''

IF @SearchText = ''
BEGIN
SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
*/
END
ELSE
BEGIN
SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
AND
*/
(
@SearchText = ''
OR
(
@SearchText <> ''
AND
CONTAINS((myField1, myField2), @SearchText)
)
)
END


[EDIT]



I found the answer here



So the solution is to set the @SearchText to '""' instead of leaving it empty.










share|improve this question























  • The search for a "match all" pattern led to this.
    – HABO
    Feb 9 '12 at 19:38










  • A default pattern like '"a*" or "b*" or ...' matches most words. There is still the opportunity to lose rows that only contain noise words, numbers, ... .
    – HABO
    Feb 9 '12 at 19:45










  • @userd* - The idea is that when I have nothing to search for (@SearchText=""), I get an error (Null or empty full-text predicate). I have a lot of other filters there in WHERE clause, so I do not want to duplicate all that logic. I was hoping I can avoid that...
    – leoinfo
    Feb 9 '12 at 20:14














up vote
2
down vote

favorite












Is there a way to avoid the error Null or empty full-text predicate in the example below ?



DECLARE @SearchText VARCHAR(1000);
SET @SearchText = ''

SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
AND
*/
(
@SearchText = ''
OR
(
@SearchText <> ''
AND
CONTAINS((myField1, myField2), @SearchText)
)
)


I could be doing like this, but I want to avoid duplicating the code :



DECLARE @SearchText VARCHAR(1000);
SET @SearchText = ''

IF @SearchText = ''
BEGIN
SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
*/
END
ELSE
BEGIN
SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
AND
*/
(
@SearchText = ''
OR
(
@SearchText <> ''
AND
CONTAINS((myField1, myField2), @SearchText)
)
)
END


[EDIT]



I found the answer here



So the solution is to set the @SearchText to '""' instead of leaving it empty.










share|improve this question























  • The search for a "match all" pattern led to this.
    – HABO
    Feb 9 '12 at 19:38










  • A default pattern like '"a*" or "b*" or ...' matches most words. There is still the opportunity to lose rows that only contain noise words, numbers, ... .
    – HABO
    Feb 9 '12 at 19:45










  • @userd* - The idea is that when I have nothing to search for (@SearchText=""), I get an error (Null or empty full-text predicate). I have a lot of other filters there in WHERE clause, so I do not want to duplicate all that logic. I was hoping I can avoid that...
    – leoinfo
    Feb 9 '12 at 20:14












up vote
2
down vote

favorite









up vote
2
down vote

favorite











Is there a way to avoid the error Null or empty full-text predicate in the example below ?



DECLARE @SearchText VARCHAR(1000);
SET @SearchText = ''

SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
AND
*/
(
@SearchText = ''
OR
(
@SearchText <> ''
AND
CONTAINS((myField1, myField2), @SearchText)
)
)


I could be doing like this, but I want to avoid duplicating the code :



DECLARE @SearchText VARCHAR(1000);
SET @SearchText = ''

IF @SearchText = ''
BEGIN
SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
*/
END
ELSE
BEGIN
SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
AND
*/
(
@SearchText = ''
OR
(
@SearchText <> ''
AND
CONTAINS((myField1, myField2), @SearchText)
)
)
END


[EDIT]



I found the answer here



So the solution is to set the @SearchText to '""' instead of leaving it empty.










share|improve this question















Is there a way to avoid the error Null or empty full-text predicate in the example below ?



DECLARE @SearchText VARCHAR(1000);
SET @SearchText = ''

SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
AND
*/
(
@SearchText = ''
OR
(
@SearchText <> ''
AND
CONTAINS((myField1, myField2), @SearchText)
)
)


I could be doing like this, but I want to avoid duplicating the code :



DECLARE @SearchText VARCHAR(1000);
SET @SearchText = ''

IF @SearchText = ''
BEGIN
SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
*/
END
ELSE
BEGIN
SELECT * FROM myTable
WHERE
/*
SOME CONTITIONS
AND
*/
(
@SearchText = ''
OR
(
@SearchText <> ''
AND
CONTAINS((myField1, myField2), @SearchText)
)
)
END


[EDIT]



I found the answer here



So the solution is to set the @SearchText to '""' instead of leaving it empty.







tsql full-text-search






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 23 '17 at 11:56









Community

11




11










asked Feb 9 '12 at 18:29









leoinfo

5,84752944




5,84752944











  • The search for a "match all" pattern led to this.
    – HABO
    Feb 9 '12 at 19:38










  • A default pattern like '"a*" or "b*" or ...' matches most words. There is still the opportunity to lose rows that only contain noise words, numbers, ... .
    – HABO
    Feb 9 '12 at 19:45










  • @userd* - The idea is that when I have nothing to search for (@SearchText=""), I get an error (Null or empty full-text predicate). I have a lot of other filters there in WHERE clause, so I do not want to duplicate all that logic. I was hoping I can avoid that...
    – leoinfo
    Feb 9 '12 at 20:14
















  • The search for a "match all" pattern led to this.
    – HABO
    Feb 9 '12 at 19:38










  • A default pattern like '"a*" or "b*" or ...' matches most words. There is still the opportunity to lose rows that only contain noise words, numbers, ... .
    – HABO
    Feb 9 '12 at 19:45










  • @userd* - The idea is that when I have nothing to search for (@SearchText=""), I get an error (Null or empty full-text predicate). I have a lot of other filters there in WHERE clause, so I do not want to duplicate all that logic. I was hoping I can avoid that...
    – leoinfo
    Feb 9 '12 at 20:14















The search for a "match all" pattern led to this.
– HABO
Feb 9 '12 at 19:38




The search for a "match all" pattern led to this.
– HABO
Feb 9 '12 at 19:38












A default pattern like '"a*" or "b*" or ...' matches most words. There is still the opportunity to lose rows that only contain noise words, numbers, ... .
– HABO
Feb 9 '12 at 19:45




A default pattern like '"a*" or "b*" or ...' matches most words. There is still the opportunity to lose rows that only contain noise words, numbers, ... .
– HABO
Feb 9 '12 at 19:45












@userd* - The idea is that when I have nothing to search for (@SearchText=""), I get an error (Null or empty full-text predicate). I have a lot of other filters there in WHERE clause, so I do not want to duplicate all that logic. I was hoping I can avoid that...
– leoinfo
Feb 9 '12 at 20:14




@userd* - The idea is that when I have nothing to search for (@SearchText=""), I get an error (Null or empty full-text predicate). I have a lot of other filters there in WHERE clause, so I do not want to duplicate all that logic. I was hoping I can avoid that...
– leoinfo
Feb 9 '12 at 20:14












1 Answer
1






active

oldest

votes

















up vote
3
down vote



accepted










I found the answer here.



The solution is to set the @SearchText to '""' instead of leaving it empty.






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f9216608%2fis-full-text-search-contains-clause-always-evaluated%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    3
    down vote



    accepted










    I found the answer here.



    The solution is to set the @SearchText to '""' instead of leaving it empty.






    share|improve this answer


























      up vote
      3
      down vote



      accepted










      I found the answer here.



      The solution is to set the @SearchText to '""' instead of leaving it empty.






      share|improve this answer
























        up vote
        3
        down vote



        accepted







        up vote
        3
        down vote



        accepted






        I found the answer here.



        The solution is to set the @SearchText to '""' instead of leaving it empty.






        share|improve this answer














        I found the answer here.



        The solution is to set the @SearchText to '""' instead of leaving it empty.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 10 at 3:53









        Pang

        6,8201563101




        6,8201563101










        answered Feb 9 '12 at 20:28









        leoinfo

        5,84752944




        5,84752944



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f9216608%2fis-full-text-search-contains-clause-always-evaluated%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Use pre created SQLite database for Android project in kotlin

            Darth Vader #20

            Ondo