全文查询字符串的全文查询参数无效

时间:2010-09-22 16:10:59

标签: asp.net linq-to-sql sql-server-2008 user-defined-functions

我在我的应用程序中使用LINQ的全文搜索,因为LINQ不支持,我使用表值函数解决方法。该功能在SQL Server 2008上创建。

令人惊讶的是,当我搜索简单的文本时,我收到错误“全文查询字符串的全文查询参数无效”。 “经理”

我使用了SQL Server Profiler,发现LINQ生成的参数为nvarchar(4000),而不是我函数中的nvarchar(250)。

最大的惊喜来自于我更改了我的SQL Server功能,因此接受参数为nvarchar(4000)而不是nvarchar(250),问题就解决了。

我也在播放将参数更改为nvarchar(2000)以及更少,但这也不起作用。

有人知道为什么会这样吗?

于2013年11月18日更新 - 好消息和坏消息

好消息 - 我现在正在使用Entity Framework 6来处理这个特定的例子,并且不再需要使用 nvarchar(4000)

坏消息 - 您必须使用 nvarchar(max): - (

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

在我的情况下,我必须强制JAVA使用匹配的数据类型调用我的表值函数,如下所示

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

答案 2 :(得分:-1)

您需要确保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)