2011-12-13 44 views
7

我正在運行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) 

回答

16

您只能在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全文搜索通過一個稱爲人口工藝,填補文字和位置索引建立全文索引其中它們出現在你的表格和行中。這就是爲什麼你需要一個能夠唯一標識你每行的字段,這就是爲什麼你需要將視圖編入索引的原因。

更多信息herehere

+0

但是有可能在我的例子上創建?不知道該從哪裏去,從你的答案。 – gulbaek

+1

@gulbaek - 我已經添加了一個示例,但我強烈建議您閱讀鏈接中的文章。第一個鏈接描述了全文搜索是如何工作的,第二個鏈接是關於如何針對多個表創建一個fts的指南。 – TheBoyan

+0

@gulbaek - 你還可以在這裏找到有關如何創建全文索引的有用信息:http://msdn.microsoft.com/en-us/library/ms187317.aspx – TheBoyan

相關問題