2010-08-04 3 views
0
SELECT u.Id FROM Users u WHERE FREETEXT((FirstName,Lastname,MiddleName),'') 
UNION 
SELECT c.AId FROM Certification c WHERE FREETEXT(*,'') 
UNION 
SELECT ad.AId FROM ApplicantDetails ad WHERE FREETEXT(*,'') 
UNION 
SELECT eb.AId FROM EducationalBackground eb WHERE FREETEXT(*,'') 
UNION 
SELECT ed.AId FROM EmploymentDetails ed WHERE FREETEXT(*,'') 
UNION 
SELECT e.AId FROM Expertise e WHERE FREETEXT(*,'') 
UNION 
SELECT ge.AId FROM GeographicalExperience ge WHERE FREETEXT(*,'') 
UNION 
SELECT pd.AId FROM ProjectDetails pd WHERE FREETEXT(*,'') 
UNION 
SELECT r.AId FROM [References] r WHERE FREETEXT(*,'') 
UNION 
SELECT t.AId FROM Training t WHERE FREETEXT(*,'') 

ответ

3

Вы не можете иметь объединения в индексированном представлении или FREETEXT, есть больше ограничений, вот неполный список

  • Выражение на колонке, используемой в предложениях GROUP BY или выражение на результаты совокупности.

  • Производная таблица.

  • Общее выражение таблицы (CTE).

  • Функции рядов.

  • UNION, КРОМЕ ИЛИ ИНТЕРЕСНЫЕ операторы.

  • Полнотекстовые предикаты CONTAINS или FREETEXT.

  • Подзапросы.

  • Наружный или самостоятельный присоединение.

  • TOP пункт.

  • ORDER BY clause.

  • КРАСОТА DISTINCT.

Смотрите здесь для получения дополнительной информации http://msdn.microsoft.com/en-us/library/ms191432.aspx

Один из способов обойти это использовать хранимую процедуру вместо

+0

нормально, есть ли у вас какие-либо другие варианты для изменения запроса выше? Запрос используется для поиска ключевых слов в разных таблицах. – user335160

+1

использовать хранимую процедуру – SQLMenace

+0

На самом деле у меня есть SP для поиска по ключевым словам, эта часть является частью поиска по ключевым словам, поэтому все, что мне нужно сейчас, это воссоздать запрос для поиска вместо указанного выше или другое другое решение, предоставленное кем-либо еще. .. – user335160

1

Вы не можете иметь союзы в индексированном представлении. Тем не менее, вы можете повторно разложить запрос как серию объединений. Кроме того, вы не можете использовать FREETEXT с индексированными представлениями. Вы можете получить тот же эффект, назвав столбцы и используя LIKE.

Альтернативой использованию индексированного представления является создание нормальной таблицы и использование триггеров для каждой из исходных таблиц, чтобы обновить ее.

+0

Фактически я использовал LIKE в последнее время, но я не доволен результатами, если вы ищете более миллиона записей, которые я должен сказать LIKE не рекомендуется использовать вместо этого, поэтому я перехожу к полнотекстовому поиску – user335160

+0

любые другие предложения будут очень оценивается ... – user335160

+0

Если представление было проиндексировано с помощью LIKE, затраты будут потрачены на то, чтобы строки были вставлены или удалены. Нет смысла использовать индексацию полного текста для поддержки индекса ANOTHER в индексированном представлении. –