我正在运行sql Server 2008 R2,我需要在具有内部联接的视图上启用全文搜索.我的问题是我不知道如何创建我的全文索引.
当我使用全文索引向导时,我收到此错误.
A unique column must be defined on this table/view.
为了让您更好地了解我的问题,请参阅w3school http://www.w3schools.com/sql/sql_join_inner.asp中的以下示例.最后一个选择只是我的观点.
PersonOrderView - View SELECT Persons.LastName,Persons.FirstName,Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.P_Id=Orders.P_Id ORDER BY Persons.LastName <- Order by is not important for me Persons - Table P_Id (PK,int,not null) LastName(nvarchar(50),null) FirstName(nvarchar(50),null) Address(nvarchar(50),null) City(nvarchar(50),null) Orders - Table O_Id(PK,not null) P_Id(FK,not null) OrderNo(nvarchar(50),not null)
解决方法
您只能在
indexed view上创建全文索引,这就是您收到错误的原因.要在表或视图上创建全文搜索,它必须具有唯一的单列非可空索引.
换句话说,您应该创建如下所示的视图:
CREATE VIEW ViewSearch WITH SCHEMABINDING AS SELECT Persons.P_Id AS ID,Persons.LastName,Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.P_Id=Orders.P_Id GO CREATE UNIQUE CLUSTERED INDEX IX_ViewSearch ON ViewSearch (ID)
sql全文搜索通过名为population的进程构建全文索引,该进程使用单词及其在表和行中出现的位置填充索引.这就是为什么您需要一个唯一标识每一行的字段,这就是您需要将视图编入索引的原因.