Параметр полнотекстового запроса для полнотекстовой строки запроса недопустим - PullRequest
10 голосов
/ 22 сентября 2010

Я использую полнотекстовый поиск с LINQ в моем приложении, и поскольку это не поддерживается LINQ, я использую обходной путь табличной функции.Функция создана в SQL Server 2008.

Удивительно, но я получаю сообщение об ошибке «Параметр полнотекстового запроса для строки полнотекстового запроса недопустим», когда я ищу простой текст, например «manager»

Я использовал SQL Server Profiler и обнаружил, что LINQ сгенерировал параметр как nvarchar (4000) вместо nvarchar (250), который находится в моей функции.

Самый большой сюрприз произошел, когда я изменил свою функцию SQL Server такон принимает параметр как nvarchar (4000) вместо nvarchar (250), и проблема решена.

Я также играл, чтобы изменить параметр на nvarchar (2000) и меньше, но это также не сработало.

Кто-нибудь знает, почему так происходит?

Обновлено 18 ноября 2013 г. - Хорошие новости и плохие новости

Хорошоновости - сейчас я использую Entity Framework 6 для этого конкретного примера, и больше не нужно использовать nvarchar (4000)

Плохие новости - вместо этого вы должны использовать nvarchar (мтопор) : - (

Ответы [ 3 ]

5 голосов
/ 08 июля 2011
1 голос
/ 04 сентября 2014

В моем случае мне пришлось заставить JAVA вызвать функцию Table-Value-Function с соответствующим типом данных, как показано ниже

query.setParameter(0, variable, new **StringNVarcharType**()  )
0 голосов
/ 21 февраля 2013

Вы должны убедиться, что размер переменных varchar (или nvarchar) одинаков в вашей функции sql и где они объявлены.

В моем случае у меня была функция, которая объявила переменную как nvarchar (100), но хранимая процедура, которая вызывала функцию, объявила переменную, переданную как nvarchar (200).Исправив это, изменив функцию на переменную хранимой процедуры.

Код ниже показывает нерабочий случай с nvarchars непостоянного размера.

CREATE FUNCTION [dbo].[udf_FullTextSearch](@searchExpression nvarchar(100))
RETURNS TABLE
AS
   RETURN
   SELECT *
   FROM Company c
   WHERE contains(c.Name, @searchExpression)
GO

DECLARE @searchExpression nvarchar(200) = '"ltd"'
SELECT * FROM [dbo].[udf_FullTextSearch](@searchExpression)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...