如何将其创建为索引视图?

时间:2010-08-04 13:35:12

标签: sql sql-server tsql

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(*,'')

2 个答案:

答案 0 :(得分:3)

你不能在索引视图或freetext中拥有联合,还有更多限制,这里是部分列表

  • GROUP BY子句中使用的列上的表达式,或聚合结果上的表达式。

  • 派生表。

  • 公用表表达式(CTE)。

  • 行集功能。

  • UNION ,EXCEPT或INTERSECT运营商。

  • 全文谓词CONTAINS或 FREETEXT

  • 的子查询。

  • 外部或自我加入。

  • TOP条款。

  • ORDER BY子句。

  • DISTINCT关键字。

有关详细信息,请参阅此处http://msdn.microsoft.com/en-us/library/ms191432.aspx

解决此问题的一种方法是使用存储过程

答案 1 :(得分:1)

您无法在索引视图中拥有联盟。您可以将查询重新表达为一系列连接。此外,您不能将FREETEXT与索引视图一起使用。您可以通过命名列并使用LIKE来获得相同的效果。

使用索引视图的替代方法是构造普通表并在每个源表上使用触发器以使其更新。