在SQL Server 2008中使用CONTAINS创建存储过程

时间:2010-01-10 13:46:43

标签: sql-server-2008 stored-procedures full-text-search

我想创建一个存储过程来使用CONTAINS进行一些组合关键字搜索,如下所示:

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

并且他的关键字数量可能会有所不同,所以我试图将整个'FORMSOF ... AND FORMSOF .....'子句作为参数传递,将参数声明为nvarchar(max),但它不会让我这样做,说参数类型“nvarchar(max)”对于“CONTAINS”的参数2无效。

那么,有没有办法让它与sp一起工作? 谢谢!

3 个答案:

答案 0 :(得分:4)

只需将contains的参数2声明为nvarchar(4000)而不是nvarchar(max),它就会起作用。

在此处查看差异:https://msdn.microsoft.com/en-us/library/ms186939.aspx

2 GB对于搜索表达式来说太多了。

答案 1 :(得分:2)

这看起来很愚蠢,但使用nvarchar(500)而不是nvarchar(max),Sql Server乐意接受它并且工作得很好。 仍然试图获得对sp_executesql的一些见解,谢谢。

答案 2 :(得分:1)

您可以动态构建它并将关键字作为参数传递。使用sp_executesql执行允许您利用查询计划缓存,如此问题的答案中所述:

Alternative to executing dynamic sql

但是,您可能需要注意这个与参数嗅探和全文查询相关的问题:

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