SQL Server 2008 Полнотекстовый поиск в таблице с составным первичным ключом - PullRequest
5 голосов
/ 23 февраля 2010

Я пытаюсь использовать полнотекстовый поиск в SQL Server 2008, однако таблица, которую я пытаюсь проиндексировать, представляет собой таблицу с составным первичным ключом, что-то вроде этого:

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

и я получаю следующую ошибку:

"'PK__MESSAGES__C87C0C9C1EC32C6A' не является допустимым индексом для принудительного применения ключ полнотекстового поиска. Ключ полнотекстового поиска должен быть уникальным, не обнуляемый, одноколонный индекс, который не находится в автономном режиме, не определен на недетерминированном или неточном неперспективном вычисляемом столбце не имеет фильтра и имеет максимальный размер 900 байт. Выбрать другой указатель для полнотекстового ключа. "

Это означает, что я не могу использовать полнотекстовый поиск в таблицах с составными первичными ключами? Или я что-то не так делаю?

Ответы [ 2 ]

9 голосов
/ 23 февраля 2010

Я думаю, что сообщение об ошибке довольно ясно, нет?

"PK_MESSAGES_C87C0C9C1EC32C6A не действительный индекс для обеспечения полного текста ключ поиска. Ключ полнотекстового поиска должен быть уникальным, не обнуляемым, одностолбцовый индекс , который не в автономном режиме, не определяется на недетерминированный или неточный неперспективный вычисляемый столбец, не имеет фильтр, и имеет максимальный размер 900 байтов. Выберите другой индекс для полнотекстовый ключ. "

Если ваш индекс не уникален, не имеет значения NULL и не содержит столбцов, он не может использоваться для полнотекстовой индексации.

Это означает, что я не могу использовать полный поиск текста в таблицах с составным первичные ключи? Или я что то делаю неправильно?

Нет, как говорит ошибка - этот вид индекса не будет работать. Период. Обойти это невозможно.

Как отметил Ремус, он никогда не говорит, что это должен быть индекс первичного ключа! Если у вас в таблице есть какое-то другое необнуляемое и уникальное поле, вы можете использовать уникальный индекс для этого поля для своих целей. Вы можете даже просто добавить INT IDENTITY(1,1) поле к вашей таблице и поместить UNIQUE INDEX в это единственное поле, и у вас все получится.

5 голосов
/ 23 февраля 2010

Ключ полнотекстового поиска должен быть уникальный, не обнуляемый, один столбец Индекс, который не в автономном режиме, не является определяется на недетерминированном или неточный неперспективный вычисляется столбец, не имеет фильтра, и имеет максимальный размер 900 байт.

Обратите внимание, что он не должен быть первичным ключом (т.е. ограничение PRIMARY KEY для таблицы). Любой уникальный индекс для необнуляемого отдельного столбца будет работать. Если у вас нет такого столбца, добавьте столбец идентификаторов в таблицу и добавьте в него индекс, а затем используйте этот индекс для полнотекстового каталога.

...