10

Estoy utilizando la Búsqueda de texto completo con LINQ en mi aplicación y, como esto no es compatible con LINQ, utilizo una solución de función de tabla de valor. La función se crea en SQL Server 2008.El parámetro de consulta de texto completo para Cadena de consulta de texto completo no es válido

Sorprendentemente, aparece el error "El parámetro de consulta de texto completo para Cadena de consulta de texto completo no es válido" cuando busco un texto simple, p. Ej. "Manager"

Utilicé SQL Server Profiler y descubrí que LINQ generaba el parámetro como nvarchar (4000) en lugar de nvarchar (250) que está en mi función.

La mayor sorpresa se produjo cuando cambié mi función de SQL Server, por lo que acepta el parámetro como nvarchar (4000) en lugar de nvarchar (250) y el problema está resuelto.

También estaba jugando para cambiar el parámetro a nvarchar (2000) y menos, pero esto tampoco funcionó.

¿Alguien sabe por qué esto se comporta de esta manera?

Actualizado el 18 de noviembre 2013 - Buenas noticias y malas noticias

Buenas noticias - Ahora estoy usando Entity Framework 6 para este ejemplo en particular y que ya no es necesario utilizar nvarchar (4000)

Malas noticias - Usted tiene que usar en su lugar nvarchar (max) :-(

+0

La única cosa que viene a la mente es que usted tiene la caché estructura de la tabla de base de datos al diseñar dbml. Puede cambiarlo a nvarchar (max) por completo y reasignarlo en su aplicación. –

Respuesta

5
+0

Hay un informe de errores para esto en [https://connect.microsoft.com/SQLServer/feedback/details/585759/lint-to-sql-parameter-resized](https://connect.microsoft.com/SQLServer/ feedback/details/585759/lint-to-sql-parameter-resized) –

+0

En caso de que alguien encuentre esto (como acabo de hacer), la solución "simple" es hacer que su parámetro de función "VarChar (8000)" funcione. Parece que el error todavía está en su lugar. Incluso LinqPad dijo que mi parámetro de L2S era VarChar (1000), pero todavía recibía errores. –

+0

Esto parece estar relacionado con la versión de .NET que está utilizando. Actualicé el proyecto a .NET 4 y obtuve este problema. Lo reduje a .NET 3.5 y el problema desapareció, aunque sigo usando VS 2012. – GSerg

-1

Debe asegurarse de que el tamaño de las variables varchar (o nvarchar) sea el mismo en su función sql y donde se declaran.

En mi caso tenía una función que declaraba la variable como nvarchar (100) pero el procedimiento almacenado que llamaba a la función declaraba la variable pasada como nvarchar (200). Cambiar la función para que sea la misma que la variable de procedimiento almacenada solucionó esto.

El siguiente código muestra el caso que no funciona con los nvarchars de tamaño incoherente.

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) 
+0

El problema es específico de Linq2Sql. No puedes resolverlo de esta manera. – GSerg

1

En mi caso he tenido que forzar JAVA para llamar a mi tabla Valor temporal de funciones a juego con el tipo de datos de la siguiente manera

query.setParameter(0, variable, new **StringNVarcharType**() ) 
Cuestiones relacionadas