Можно ли использовать ContactStable, чтобы получить результаты для более чем одного столбца?
-
20-09-2019 - |
Вопрос
Рассмотрим следующую таблицу:
Люди
- FirstName Nvarchar (50)
- Lastname nvarchar (50)
Давайте предположим, что на этой таблице есть полнотекстовый индекс для обоих столбцов.
Давайте предположим, что я хотел найти всех людей по имени «Джон Смит» в этом столе. Следующий запрос кажется совершенно рациональным способом достижения этого:
SELECT * from People p
INNER JOIN CONTAINSTABLE(People,*,'"John*" AND "Smith*"')
К сожалению, это не даст результатов, предполагая, что в Люди Таблица, которая содержит как «Джон», так и «Смит» в столбцах первого или последнего имени. Он не будет соответствовать записи с «John» в столбце FirstName, и «Смит» в столбце LastName или наоборот.
Мой вопрос: как можно сделать то, что я пытаюсь сделать выше? Пожалуйста, учтите, что пример выше упрощен. Настоящая таблица, с которой я работаю, имеет десять столбцов, а вход, который я получаю, - это единственная строка, которая разделена на основе стандартных слов (пространство, Dash и т. Д.)
Решение 2
Вот что я закончил делать:
Пример, который я дал выше, мог быть немного упрощенным. В фактическом приложении полнотекстовый индекс фактически находится в представлении, который представляет соединение двух таблиц. Одним из преимуществ этого является то, что схема представления может быть независимой от таблицы (ов), из которых она построена.
Чтобы использовать мой (упрощенный) пример свыше, у меня есть таблица, которая выглядит так:
Люди
- FirstName Nvarchar (50)
- Lastname nvarchar (50)
Вид, из которого на самом деле построен индекс, выглядел так:
Peopleview
- FirstName Nvarchar (50)
- Lastname nvarchar (50)
Чтобы обойти эту проблему, я изменил схему представления, чтобы теперь имелся один столбец (плюс ключ), который содержит содержимое всей таблицы, представленных представлением:
Peopleview
- Имя (FirstName + '' + LastName)
Полнотекстовый каталог должен был быть восстановлен, конечно, с учетом новой схемы представления, но все изменения были внесены на уровне базы данных, что означало никаких изменений в код приложения. Мне пришлось внести несколько настройки в вид, чтобы обрабатывать столбцы, которые могут иметь нулевые значения, поскольку нулевые объединены с чем угодно = NULL.