我想创建一个存储过程来使用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一起工作? 谢谢!
答案 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