2010-02-21 14 views
16

Tengo una tabla de base de datos con la columna principal se define como:¿Por qué no puedo crear este índice de texto completo del servidor sql?

ID bigint identity primary key 

también tengo una columna de texto MiddlePart. Estoy tratando de crear un índice de texto completo, así:

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

me sale este error:

'ID' no es un índice válido para hacer cumplir una clave de búsqueda de texto completo. Una clave de búsqueda de texto completo debe ser un índice único, no anulable, de una sola columna que no está fuera de línea, no está definido en una columna calculada no implícita o no imprecisa, no tiene filtro y tiene un tamaño máximo de 900 bytes. Elija otro índice para la clave de texto completo.

¿Qué estoy haciendo mal?

Respuesta

27

Después de KEY INDEX, debe especificar el nombre del índice, no la columna. Para buscar el nombre del índice en la ID de columna, escriba sp_help DomainName y aparecerá una lista de índices en esa tabla. El pk se llamará algo así como PK_xxxxx. Use ese nombre de índice en lugar de "ID".

+1

Gracias, estaba tratando de usar el nombre de la columna: d – MonsterMMORPG

+0

http://technet.microsoft.com/en-us/library/ms187317.aspx "KEY INDEX index_name - Es el nombre del ** índice de clave único ** en table_name. " –

+0

¡Gracias por indicarme la dirección correcta! EN ** SSMS ** si abre el '+' en su tabla y va a 'Keys', el nombre resaltado en oro que comienza con' PK_' es su clave principal. ¡Una vez más, gracias! – Termato

4

En lugar de especificar el nombre de la columna, especifique el nombre del índice. Usted puede encontrar el nombre del índice de clave principal como:

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

A continuación, puede crear un índice de texto completo como:

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 primera línea de la declaración incluye la cláusula ON, que especifica el nombre de la tabla (en este caso, ProductDocs). La siguiente línea de la declaración es una lista de las columnas que deben indexarse ​​(DocSummary y DocContent).

La siguiente línea de la instrucción CREATE FULLTEXT INDEX en el ejemplo anterior es la cláusula KEY INDEX. Este es el nombre del índice de clave único (en este caso, PK_ProductDocs_DocID) que se define en la tabla ProductDocs. Asegúrese de especificar el nombre del índice, y no el nombre de la columna, cuando defina su índice de texto completo.

Siguiendo la cláusula KEY INDEX en la definición de índice de texto completo está la cláusula ON, que especifica el nombre del catálogo de texto completo (ProductFTS) al que se unirá el índice. En SQL Server 2008, también puede especificar un grupo de archivos donde se almacenará el índice. Sin embargo, esta opción no está disponible en SQL Server 2005 porque la asociación del grupo de archivos está en el nivel del catálogo.

La cláusula final en la instrucción de ejemplo CREATE FULLTEXT INDEX es WITH STOPLIST. Esta opción, disponible solo en SQL Server 2008, le permite especificar el nombre del archivo de resumen que se usará para este índice. En este caso, se utiliza el archivo de bloqueo del sistema, pero en su lugar puede especificar un archivo de resumen definido por el usuario. (Las listas de exclusión se tratan con más detalle más adelante en el artículo.)

Cuestiones relacionadas