我正在运行Sql Server 2008 R2,我需要在具有内部联接的视图上启用全文搜索。我的问题是我不知道如何创建我的全文索引。
当我使用全文索引向导时,我收到此错误。
必须在此表/视图上定义唯一列。
为了让您更好地了解我的问题,请参阅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, int, not null)
P_Id(FK, int, not null)
OrderNo(nvarchar(50), not null)
答案 0 :(得分:18)
您只能在indexed view上创建全文索引,这就是您收到错误的原因。要在表或视图上创建全文搜索,它必须具有唯一的,单列,不可为空的索引。
换句话说,您应该创建这样的视图:
CREATE VIEW ViewSearch WITH SCHEMABINDING AS
SELECT Persons.P_Id AS ID, Persons.LastName, Persons.FirstName, 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的进程构建全文索引,该进程使用单词及其在表和行中出现的位置填充索引。这就是为什么您需要一个唯一标识每一行的字段,这就是您需要将视图编入索引的原因。