2010-02-21 10 views
16

ho una tabella del database con la colonna primaria definita come:Perché non riesco a creare questo indice full text del server sql?

ID bigint identity primary key 

Ho anche una colonna di testo MiddlePart. Sto cercando di creare un indice completo, in questo modo:

CREATE FULLTEXT INDEX ON domaining.dbo.DomainName 
(
    MiddlePart 
    Language 0X0 
) 
KEY INDEX ID ON domaincatalog 
WITH CHANGE_TRACKING AUTO 

ottengo questo errore:

'ID' non è un indice valido per imporre una chiave di ricerca full-text. Una chiave di ricerca full-text deve essere un indice univoco, non annullabile, a colonna singola non offline, non definito su una colonna calcolata non parametrica o non controllata, non ha un filtro e ha una dimensione massima di 900 byte. Scegli un altro indice per la chiave full-text.

Cosa sto sbagliando?

risposta

27

Dopo KEY INDEX, è necessario specificare il nome dell'indice e non la colonna. Per trovare il nome dell'indice sull'ID della colonna, digitare sp_help DomainName e ci sarà un elenco di indici su quella tabella. Il pk sarà chiamato qualcosa come PK_xxxxx. Usa quel nome indice invece di "ID".

+1

Grazie stavo cercando di utilizzare il nome della colonna: d – MonsterMMORPG

+0

http://technet.microsoft.com/en-us/library/ms187317.aspx "KEY INDEX index_name - È il nome dell'indice della chiave ** ** su table_name. " –

+0

Grazie per avermi indicato nella giusta direzione! IN ** SSMS ** se apri il '+' sul tuo tavolo e vai a 'Keys' il nome dell'evidenziazione in oro che inizia con' PK_' è la tua chiave primaria. Grazie ancora! – Termato

4

Invece di specificare il nome della colonna, specificare il nome dell'indice. È possibile trovare il nome dell'indice chiave primaria come:

select name from sysindexes where object_id('DomainName') = id 

Quindi è possibile creare un indice full-text come:

CREATE FULLTEXT INDEX ON DomainName 
(
    MiddlePart 
    Language 0X0 
) 
KEY INDEX PK__DomainName__40E497F3 ON domaincatalog 
WITH CHANGE_TRACKING AUTO 
1

https://www.simple-talk.com/sql/learn-sql-server/understanding-full-text-indexing-in-sql-server/

CREATE TABLE ProductDocs (
    DocID INT NOT NULL IDENTITY, 
    DocTitle NVARCHAR(50) NOT NULL, 
    DocFilename NVARCHAR(400) NOT NULL, 
    FileExtension NVARCHAR(8) NOT NULL, 

     DocSummary NVARCHAR(MAX) NULL, 
     DocContent VARBINARY(MAX) NULL, 
     CONSTRAINT [PK_ProductDocs_DocID] PRIMARY KEY CLUSTERED (DocID ASC) 
    ) 
CREATE FULLTEXT INDEX ON ProductDocs 
(DocSummary, DocContent TYPE COLUMN FileExtension LANGUAGE 1033) 
KEY INDEX PK_ProductDocs_DocID 
ON ProductFTS 
WITH STOPLIST = SYSTEM 

La prima riga della dichiarazione include la clausola ON, che specifica il nome della tabella (in questo caso ProductDocs). La riga successiva dell'istruzione è un elenco delle colonne che devono essere indicizzate (DocSummary e DocContent).

La riga successiva dell'istruzione CREATE FULLTEXT INDEX nell'esempio precedente è la clausola KEY INDEX. Questo è il nome dell'indice chiave univoco (in questo caso, PK_ProductDocs_DocID) definito nella tabella ProductDocs. Assicurati di specificare il nome dell'indice, e non il nome della colonna, quando definisci il tuo indice full-text.

In seguito alla clausola KEY INDEX nella definizione dell'indice full-text si trova la clausola ON, che specifica il nome del catalogo full-text (ProductFTS) a cui l'indice si aggiungerà. In SQL Server 2008, è anche possibile specificare un filegroup in cui verrà memorizzato l'indice. Tuttavia, questa opzione non è disponibile in SQL Server 2005 perché l'associazione del filegroup è a livello di catalogo.

La clausola finale nell'esempio CREATE FULLTEXT INDEX è WITH STOPLIST. Questa opzione, disponibile solo in SQL Server 2008, consente di specificare il nome dell'elenco di stop che verrà utilizzato per questo indice. In questo caso, viene utilizzata la lista di arresto del sistema, ma è possibile specificare una lista di arresto definita dall'utente. (Le liste sono trattate più dettagliatamente più avanti nell'articolo.)

Problemi correlati