5

J'essaie de mettre la recherche en texte intégral sur SQL Server 2008, mais la table que j'essaie d'indexer est une table avec une clé primaire composite, quelque chose comme ceci:SQL Server 2008 Recherche de texte intégral sur une table avec une clé primaire composite

EXEC sp_fulltext_catalog 'My_Catalog', 'create' 
EXEC sp_fulltext_table 'Message', 'create', 'My_Catalog', 'PK__MESSAGES__C87C0C9C0EC32C7A' // PK__MESSAGES__C87C0C9C1EC32C6A is a composite key 

et je reçois l'erreur suivante:. « « PK__MESSAGES__C87C0C9C1EC32C6A » est pas un index valide pour appliquer une clé de recherche de texte intégral une clé de recherche en texte intégral doit être unique, non annulable, L'index à une seule colonne qui n'est pas hors ligne, n'est pas défini sur une colonne calculée non-déterministe ou imprécise, n'a pas de filtre et a une taille maximale de 900 octets.Choisissez un autre index pour la clé de texte intégral. "

Cela signifie que je ne peux pas utiliser la recherche de texte intégral dans des tables avec des clés primaires composites? Ou est-ce que je fais quelque chose de mal?

Merci à l'avance

Répondre

8

Je pense que le message d'erreur est assez clair, non?

" PK_MESSAGES_C87C0C9C1EC32C6A is not a valid index to enforce a full-text search key. A full-text search key must be a unique, non-nullable, single-column index which is not offline, is not defined on a non-deterministic or imprecise nonpersisted computed column, does not have a filter, and has maximum size of 900 bytes. Choose another index for the full-text key."

Si votre index n'est pas unique, pas non annulable, et non une seule colonne, il ne peut pas être utilisé pour l'indexation du texte intégral.

This means that i can't use the full text search in tables with composite primary keys? Or am i doing something wrong?

Non, comme l'indique l'erreur - ce type d'index ne fonctionnera pas. Période. Pas moyen de contourner cela. Comme Remus l'a fait remarquer - il ne dit jamais qu'il doit être l'indice de clé primaire! Si vous avez un autre champ non-nullable et unique sur la table, vous pouvez utiliser un index unique sur ce champ pour vos besoins. Vous pouvez même simplement ajouter un champ INT IDENTITY(1,1) à votre table et mettre un UNIQUE INDEX sur ce seul champ et vous devriez être prêt à partir.

+0

C'est ce que je m'attendais, je pourrais juste me tromper, car une clé primaire composite est toujours une contrainte unique (mais pas une seule colonne, c'est le problème). Merci beaucoup, je viens de créer le champ unique, et a travaillé =) –

4

A full-text search key must be a unique, non-nullable, single-column index which is not offline, is not defined on a non-deterministic or imprecise nonpersisted computed column, does not have a filter, and has maximum size of 900 bytes.

Notez qu'il ne doit pas être la clé primaire (ie. La principale contrainte KEY sur la table). Tout index unique sur une seule colonne non nullable fonctionnera. Si vous ne disposez pas d'une telle colonne, ajoutez une colonne d'identité à la table et ajoutez-y un index, puis utilisez cet index pour le catalogue de texte intégral.

Questions connexes