全文查询字符串的全文查询参数无效
我在应用程序中使用带有 LINQ 的全文搜索,由于 LINQ 不支持此功能,所以我使用表值函数解决方法。该函数是在 SQL Server 2008 上创建的。
令人惊讶的是,当我搜索简单文本(例如“manager”)时,我收到错误“全文查询字符串的全文查询参数无效”,
我使用 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) :-(
I am using Full Text Search with LINQ in my application and as this is not supported by LINQ I use a table-valued function workaround. The function is created on SQL Server 2008.
Surprisingly, I get error “The full-text query parameter for Fulltext Query String is not valid” when I search for a simply text e.g. “manager”
I used SQL Server Profiler and found out that LINQ generated the parameter as nvarchar(4000) instead of nvarchar(250) which is in my function.
The biggest surprise came when I changed my SQL Server function so it accepts parameter as nvarchar(4000) instead of nvarchar(250) and the problem is solved.
I was also playing to change the parameter to nvarchar(2000) and less but this also didn’t work.
Does anybody know why this behaves this way?
Updated on 18th November 2013 - Good news and bad news
Good news - I am now using Entity Framework 6 for this particular example and it is not anymore needed to use nvarchar(4000)
Bad news - You have to use instead nvarchar(max) :-(
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有关扩展,请参阅以下链接 http:// Social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/1a46d676-32f0-44a4-b39f-61a17bccb8e3/。
For an expanation see the following link http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/1a46d676-32f0-44a4-b39f-61a17bccb8e3/.
就我而言,我必须强制 JAVA 使用匹配的数据类型调用我的表值函数,如下所示
In my case I had to force JAVA to call my Table-Value-Function with matching datatype as below
您需要确保 varchar(或 nvarchar)变量的大小在 sql 函数中以及声明它们的位置相同。
就我而言,我有一个将变量声明为 nvarchar(100) 的函数,但调用该函数的存储过程将传入的变量声明为 nvarchar(200)。将函数更改为与存储过程变量相同可以解决此问题。
下面的代码显示了 nvarchar 大小不一致的非工作情况。
You need to ensure the size of the varchar (or nvarchar) variables are the same in your sql function and where they are declared.
In my case I had a function that declared the variable as nvarchar(100) but the stored procedure that called the function declared the variable passed in as nvarchar(200). Changing the function to be the same as the stored procedure variable fixed this.
Code below shows the non-working case with the inconsistently sized nvarchars.