2011-12-13 14 views
7

Sono in esecuzione Sql Server 2008 R2 e devo abilitare la ricerca full-text su una vista con un inner join. Il mio problema è che non so come creare il mio indice full-text.Abilita ricerca full-text sulla vista con inner join

Quando utilizzo la procedura guidata di indicizzazione di testo completo, viene visualizzato questo errore.

Una colonna univoca deve essere definita su questa tabella/vista.

Al fine di capire meglio il mio problema, vedere il seguente esempio da W3School http://www.w3schools.com/sql/sql_join_inner.asp L'ultima di selezione è solo la mia vista.

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) 

risposta

16

È possibile creare solo un indice testo completo su un indexed view, è per questo che si stanno ottenendo l'errore. Per creare una ricerca full-text su una tabella o una vista, deve avere un indice univoco, a colonna singola, non annullabile.

In altre parole, è necessario creare la visualizzazione o meno così:

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 ricerca full-text costruisce un indice full-text attraverso un processo chiamato popolazione, che riempie l'indice con le parole e le posizioni in cui si verificano nelle tue tabelle e file. Questo è il motivo per cui hai bisogno di un campo che identifichi in modo univoco ogni riga ed è per questo che è necessario rendere la vista indicizzata.

Altre informazioni here e here.

+0

Ma è possibile creare sul mio esempio? Non sai da dove andare, dalla tua risposta. – gulbaek

+1

@gulbaek - Ho aggiunto un esempio, ma consiglio vivamente di leggere gli articoli nei collegamenti. Il primo collegamento descrive come funziona la ricerca full-text e la seconda è una guida su come creare un fts su più tabelle. – TheBoyan

+0

@gulbaek - puoi anche trovare informazioni utili su come creare un indice full-text qui: http://msdn.microsoft.com/en-us/library/ms187317.aspx – TheBoyan