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設置爲'""'
把它留空。
搜索「全部匹配」模式導致[this](http://stackoverflow.com/questions/506284/containstable-and-contains-which-string-to-pass-to-match-all-記錄)。 – HABO 2012-02-09 19:38:30
像「'」a *「或」b *「或...」'這樣的默認模式與大多數單詞相匹配。仍然有機會丟失只包含噪音詞彙,數字......的行。 – HABO 2012-02-09 19:45:37
@user \ d * - 這個想法是,當我沒有搜索到任何東西時(@ SearchText =「」),我得到一個錯誤(空或全空全文謂詞)。我在WHERE子句中有很多其他的過濾器,所以我不想複製所有的邏輯。我希望能避免這種情況... – leoinfo 2012-02-09 20:14:56