2010-08-04 56 views
0
SELECT u.Id FROM Users u WHERE FREETEXT((FirstName,Lastname,MiddleName),'') 
UNION 
SELECT c.AId FROM Certification c WHERE FREETEXT(*,'') 
UNION 
SELECT ad.AId FROM ApplicantDetails ad WHERE FREETEXT(*,'') 
UNION 
SELECT eb.AId FROM EducationalBackground eb WHERE FREETEXT(*,'') 
UNION 
SELECT ed.AId FROM EmploymentDetails ed WHERE FREETEXT(*,'') 
UNION 
SELECT e.AId FROM Expertise e WHERE FREETEXT(*,'') 
UNION 
SELECT ge.AId FROM GeographicalExperience ge WHERE FREETEXT(*,'') 
UNION 
SELECT pd.AId FROM ProjectDetails pd WHERE FREETEXT(*,'') 
UNION 
SELECT r.AId FROM [References] r WHERE FREETEXT(*,'') 
UNION 
SELECT t.AId FROM Training t WHERE FREETEXT(*,'') 

回答

3

你不能有工會索引視圖或FreeText的,也有更多的限制,這裏是部分清單

  • 上在GROUP BY子句中使用列的表達式,或者在一個表達式綜合結果。

  • 一個派生表。

  • 公用表格表達式(CTE)。

  • 行集函數。

  • UNION,EXCEPT或INTERSECT運算符。

  • 全文謂詞CONTAINS或FREETEXT

  • 子查詢。

  • 外部或自我連接。

  • TOP子句。

  • ORDER BY子句。

  • DISTINCT關鍵字。

這裏看到更多的信息,以獲得http://msdn.microsoft.com/en-us/library/ms191432.aspx

一種方法解決此是使用存儲過程,而不是

+0

好的,你有沒有其他的選擇來修改上面的查詢?查詢用於在不同的表中搜索關鍵字。 – user335160 2010-08-04 13:43:08

+1

使用存儲過程 – SQLMenace 2010-08-04 13:48:55

+0

實際上,我有一個用於關鍵字搜索的SP,這部分是關鍵字搜索的一部分,所以我現在需要的是重新創建一個查詢而不是上面的查詢,或者其他人提供的任何其他解決方案。 .. – user335160 2010-08-04 14:09:33

1

你不能有工會索引視圖。儘管如此,您也許可以將查詢重新定爲一系列連接。另外,您不能將FREETEXT與索引視圖一起使用。您可以通過命名列和使用LIKE來獲得相同的效果。

使用索引視圖的替代方法是構造一個普通表並在每個源表上使用觸發器來更新它。

+0

其實我最近用了LIKE,但是如果你搜索超過一百萬條記錄,我不滿意,我必須說LIKE不推薦用來代替,這就是爲什麼我切換到全文搜索 – user335160 2010-08-04 14:11:13

+0

任何其他建議都會高度讚賞... – user335160 2010-08-04 14:12:02

+0

如果視圖使用LIKE編入索引,則在插入或刪除行時將花費成本。在索引視圖中使用全文搜索索引來支持ANOTHER索引是毫無意義的。 – 2010-08-04 17:37:45