Создайте хранимую процедуру с помощью CONTAINS в SQL Server 2008 - PullRequest
4 голосов
/ 10 января 2010

Я хочу создать хранимую процедуру для выполнения комбинированного поиска по ключевым словам, используя CONTAINS, что-то вроде ниже:

SELECT theContent
FROM FtsTest
WHERE CONTAINS
   (theContent, 
   ' FORMSOF (INFLECTIONAL, keyword1) AND FORMSOF (INFLECTIONAL, keyword2)');

и количество ключевых слов может варьироваться, поэтому я попытался передать в качестве параметра целое предложение 'FORMSOF ... AND FORMSOF .....', объявив параметр как nvarchar (max), но он не будет позвольте мне сделать это, сказав, что тип аргумента «nvarchar (max)» недопустим для аргумента 2 «СОДЕРЖИТ».

Итак, есть ли способ заставить его работать с sp? Спасибо!

Ответы [ 3 ]

4 голосов
/ 17 декабря 2015

Просто объявите аргумент 2 из contains как nvarchar(4000) вместо nvarchar(max), и он будет работать.

Смотрите разницу здесь: https://msdn.microsoft.com/en-us/library/ms186939.aspx

2 ГБ - это слишком много для выражения поиска.

2 голосов
/ 10 января 2010

это кажется глупым, но используя nvarchar (500) вместо nvarchar (max), Sql Server с радостью принимает его и работает просто отлично. Все еще пытаюсь получить представление о sp_executesql, спасибо.

1 голос
/ 10 января 2010

Вы можете построить его динамически и передать ключевые слова в качестве параметров. Выполнение с помощью sp_executesql позволяет использовать преимущества кэша плана запросов, как описано в ответах на этот вопрос:

Альтернатива выполнению динамического sql

Возможно, вам придется остерегаться этой проблемы, связанной с анализом параметров и полнотекстовыми запросами:

http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=510118

...