2012-02-09 66 views
2

有沒有辦法避免錯誤在下面的例子中爲空或全空文全稱謂詞是否全文搜索CONTAINS子句總是被評估?

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

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

我可以做這樣的,但我想,以避免重複代碼:

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 

[編輯]

我找到了答案here

所以解決方法是將@SearchText設置爲'""'把它留空。

+0

搜索「全部匹配」模式導致[this](http://stackoverflow.com/questions/506284/containstable-and-contains-which-string-to-pass-to-match-all-記錄)。 – HABO 2012-02-09 19:38:30

+0

像「'」a *「或」b *「或...」'這樣的默認模式與大多數單詞相匹配。仍然有機會丟失只包含噪音詞彙,數字......的行。 – HABO 2012-02-09 19:45:37

+0

@user \ d * - 這個想法是,當我沒有搜索到任何東西時(@ SearchText =「」),我得到一個錯誤(空或全空全文謂詞)。我在WHERE子句中有很多其他的過濾器,所以我不想複製所有的邏輯。我希望能避免這種情況... – leoinfo 2012-02-09 20:14:56

回答

3

我找到了答案here

因此,解決方案是將@SearchText設置爲'""'而不是把空的。

相關問題